Bean SpringBoot make your move (custom parameter parsing HandlerMethodArgumentResolver)

Bean SpringBoot make your move (custom parameter parsing HandlerMethodArgumentResolver)

Brief introduction

Our Controllernumber used Beanneed some way to get through, you can get by acquiring other ways injection method is acquired.

For example: Users need to use an example, we usually practice for the next

@Resource
private UserService userService;

@GetMapping("getUserByUsername")
public String getUserByUsername(HttpServletRequest request) {

    ...
    AuthUser user = userService.getUserByUsername("小明");
    ...
}

This is the general practice, we can find that HttpServletRequestcan be loaded by injection method, you can also directly public String getUserByUsername()get to the method parameters.

This way also our Userobject encapsulates the method parameters inside.

When we perform Controllerwill have a corresponding user objects exist.

Use function

customize UserArgumentResolver

Here we need to use a HandlerMethodArgumentResolverconnector.

Custom UserArgumentResolverprocessing User.

/**
 * 封装 参数方式获取 {@link AuthUser} 对象
 *
 * @author purgeyao
 * @since 1.0
 */
public class UserArgumentResolver implements HandlerMethodArgumentResolver {

  @Override
  public boolean supportsParameter(MethodParameter methodParameter) {
    Class<?> aClass = methodParameter.getParameterType();
    // 判断是否为 AuthUser 类
    return aClass == AuthUser.class;
  }

  @Override
  public Object resolveArgument(MethodParameter methodParameter,
      ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest,
      WebDataBinderFactory webDataBinderFactory) throws Exception {

    HttpServletRequest request = nativeWebRequest.getNativeRequest(HttpServletRequest.class);

    // 获取参数
    
    String name = request.getParameter("name");

    // TODO 获取对应的用户对象 查询操作

    AuthUser user = userService.getUserByUsername(name);

    return user;
  }
}

In the above code performs Controllerprocessing before. Request parameters or by acquisition request header (see their particular business).

Implementation of the corresponding object query operation. Then you can Controllerconveniently use a parameter in.

Controller Method parameters

@GetMapping("getUserByUsername")
public String getUserByUsername(AuthUser user) {
    ...
    user.getAge();
    ...
}

to sum up

The introduction HandlerMethodArgumentResolveruse, please refer to the relevant principles of the article.

Sample Code Address: UserArgumentResolver

On GitHub:
Purgeyao welcome attention

qq exchange group: 812321371micro-channel exchange group:MercyYao

Micro-channel public number:

Micro-channel public number two-dimensional code

Guess you like

Origin www.cnblogs.com/Purgeyao/p/11919396.html
Recommended