第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

HandlerMethodArgumentResolver的原理是什么?

HandlerMethodArgumentResolver的原理是什么?

Qyouu 2019-01-16 09:06:46
如題:在一個controller的請求方法中,有兩個自定義的參數(shù)注解@UserInfo和@SchoolInfo @RequestMapping(value = "/filter/test2") public String test2(@RequestBody String o, @UserInfo UserInfoVo userInfoVo, @SchoolInfo SchoolInfoVo schoolInfoVo) { System.out.println("Controller中獲取的請求數(shù)據(jù):" + o); System.out.println("自定義注解UserInfo的值:" + userInfoVo); System.out.println("自定義注解SchoolInfo的值:" + schoolInfoVo); return "OK"; } 實現(xiàn)兩個參數(shù)解析器如下: public class LoginUserInfoMethodArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { // return parameter.getParameterType().equals(UserInfoVo.class); System.out.println("login" + parameter.hasParameterAnnotation(UserInfo.class)); return parameter.hasParameterAnnotation(UserInfo.class); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { HttpServletRequest httpServletRequest = webRequest.getNativeRequest(HttpServletRequest.class); String str = HttpHelper.getBodyString(httpServletRequest); System.out.println("參數(shù)解析器login獲取的請求數(shù)據(jù):" + str); UserInfoVo u = new UserInfoVo(); u.setName("洪桓"); u.setAge(233); return u; } } public class SchoolInfoMethodArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { System.out.println("school" + parameter.hasParameterAnnotation(SchoolInfo.class)); return parameter.hasParameterAnnotation(SchoolInfo.class); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { HttpServletRequest httpServletRequest = webRequest.getNativeRequest(HttpServletRequest.class); String str = HttpHelper.getBodyString(httpServletRequest); System.out.println("參數(shù)解析器school獲取的請求數(shù)據(jù):" + str); SchoolInfoVo schoolInfoVo = new SchoolInfoVo(); schoolInfoVo.setName("HNU"); schoolInfoVo.setYear(1980); return schoolInfoVo; } } WebMvcConfigurerAdapter中實現(xiàn)順序如下: @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { super.addArgumentResolvers(argumentResolvers); argumentResolvers.add(new LoginUserInfoMethodArgumentResolver()); argumentResolvers.add(new SchoolInfoMethodArgumentResolver()); } 最后輸出結(jié)果 logintrue loginfalse schooltrue 如果按照list的添加順序算的話,第一遍掃描判斷parameter.hasParameterAnnotation(UserInfo.class)是true,第二遍掃描parameter.hasParameterAnnotation(UserInfo.class)和parameter.hasParameterAnnotation(SchoolInfo.class)分別是flase和true,為什么第二次參數(shù)解析器中會返回false
查看完整描述

1 回答

?
墨色風(fēng)雨

TA貢獻(xiàn)1853條經(jīng)驗 獲得超6個贊

第一次是傳 @UserInfo UserInfoVo userInfoVo 進(jìn)去,所以是true

第二次是傳 @SchoolInfo SchoolInfoVo schoolInfoVo 進(jìn)去,所以是false,然后遍歷到 SchoolInfoMethodArgumentResolver 返回true了

查看完整回答
反對 回復(fù) 2019-02-12
  • 1 回答
  • 0 關(guān)注
  • 1389 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號