SpringBoot讓你的Bean動起來(自定義參數解析HandlerMethodArgumentResolver) 簡介 我們 用到的一些 需要通過一定的方式去獲取的,可以通過註入方式獲取其他獲取方式進行獲取。 比如:需要用到用戶實例,我們通常做法為下 這樣是一般的做法,我們可以發現 可以通過註入 ...
SpringBoot讓你的Bean動起來(自定義參數解析HandlerMethodArgumentResolver)
簡介
我們 Controller
用到的一些 Bean
需要通過一定的方式去獲取的,可以通過註入方式獲取其他獲取方式進行獲取。
比如:需要用到用戶實例,我們通常做法為下
@Resource
private UserService userService;
@GetMapping("getUserByUsername")
public String getUserByUsername(HttpServletRequest request) {
...
AuthUser user = userService.getUserByUsername("小明");
...
}
這樣是一般的做法,我們可以發現 HttpServletRequest
可以通過註入方式載入,也可以直接在 public String getUserByUsername()
方法參數獲取到。
這樣的方式 也把我們的 User
對象封裝到方法參數里。
當我們執行 Controller
就會有一個對應用戶的對象存在了。
功能使用
自定義 UserArgumentResolver
這裡我們需要使用到一個 HandlerMethodArgumentResolver
介面。
自定義 UserArgumentResolver
處理 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;
}
}
上述代碼會在執行 Controller
之前處理。通過獲取請求頭 或者 請求里的參數(具體看自己的業務)。
執行相應的對象查詢操作。接下來就可以在 Controller
參數里可以方便使用了。
Controller
方法參數使用
@GetMapping("getUserByUsername")
public String getUserByUsername(AuthUser user) {
...
user.getAge();
...
}
總結
上述介紹 HandlerMethodArgumentResolver
使用,原理請參考相關文章。
示例代碼地址:UserArgumentResolver
作者GitHub:
Purgeyao 歡迎關註
qq交流群:
812321371
微信交流群:MercyYao
微信公眾號: