Bean SpringBoot make your move (custom parameter parsing HandlerMethodArgumentResolver)
Brief introduction
Our Controller
number used Bean
need 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 HttpServletRequest
can be loaded by injection method, you can also directly public String getUserByUsername()
get to the method parameters.
This way also our User
object encapsulates the method parameters inside.
When we perform Controller
will have a corresponding user objects exist.
Use function
customize UserArgumentResolver
Here we need to use a HandlerMethodArgumentResolver
connector.
Custom UserArgumentResolver
processing 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 Controller
processing before. Request parameters or by acquisition request header (see their particular business).
Implementation of the corresponding object query operation. Then you can Controller
conveniently use a parameter in.
Controller
Method parameters
@GetMapping("getUserByUsername")
public String getUserByUsername(AuthUser user) {
...
user.getAge();
...
}
to sum up
The introduction HandlerMethodArgumentResolver
use, please refer to the relevant principles of the article.
Sample Code Address: UserArgumentResolver
On GitHub:
Purgeyao welcome attention
qq exchange group:
812321371
micro-channel exchange group:MercyYao
Micro-channel public number: