中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot中怎么利用WebMvcConfigurer實現參數校驗

發布時間:2021-07-22 15:58:34 來源:億速云 閱讀:184 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關SpringBoot中怎么利用WebMvcConfigurer實現參數校驗,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

現有兩種解決方案

1 直接實現WebMvcConfigurer (官方推薦)2 直接繼承WebMvcConfigurationSupport

首先附上代碼。

@Slf4j@Controller@RequestMapping("/goods")public class GoodsController {   @Autowired  MiaoshaUserService miaoshaUserService;  //  @GetMapping("/to_list")//  public String toList(Model model, MiaoshaUser miaoshaUser) {//    model.addAttribute("miaoshaUser",miaoshaUser);//    return "list";//  }    @GetMapping("/to_list")  public String toList(Model model,             HttpServletResponse response,             @CookieValue(value = MiaoshaUserServiceImpl.COOKIE_NAME_TOKEN,required = false)String cookieToken,             @RequestParam(value = MiaoshaUserServiceImpl.COOKIE_NAME_TOKEN,required = false)String paramToken) {    if(StringUtils.isEmpty(cookieToken) && StringUtils.isEmpty(paramToken)){      return "login";    }    String token = StringUtils.isEmpty(paramToken)?cookieToken:paramToken;    MiaoshaUser miaoshaUser = miaoshaUserService.getByToken(response,token);    model.addAttribute("miaoshaUser",miaoshaUser);    return "list";  } }

toList需要實現的功能是在cookie或requestParam中獲取到token,通過token去redis中獲取詳細的用戶信息,再將用戶信息放到頁面進行展示。上面傳統的方式入參有非常多,最后需要的是拿到MiaohshaUser對象,在程序的實際編寫過程中,會有許多方法需要經過這樣的過程獲取到該對象,如何精簡下代碼,在入參只有需要獲取的對象的時候,經過一系列的操作從cookie拿到token以及redis獲取具體對象呢?

下面通過實現WebMvcConfigurer接口來實現。

/** * @author hsw * @Date 10:12 2018/5/8 */@Configurationpublic class WebConfig implements WebMvcConfigurer {   @Autowired  UserArgumentResolver userArgumentResolver;   @Override  public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {    argumentResolvers.add(userArgumentResolver);  } }

新建一個WebConfig類實現WebMvcConfigurer接口,WebMvcConfigurer是一個攔截器,里面有非常多的方法,我們用到的是addArgumentResolvers方法。需要注意的是類頭需要加上@Configuration注解將該類交給spring管理。

addArgumentResolvers具體內容后文會提到。

新建UserArgumentResolver類實現HandlerMethodArgumentResolver接口

實現HandlerMethodArgumentResolver接口需要重寫supportsParameter方法和resolveArgument方法。

resolveArgument中從cookie或requestparam中獲取token值,并從redis中查詢到具體的MiaoshaUser信息并返回。

UserArgumentResolver類編寫完成后,在上面的WebConfig類中的addArgumentResolvers方法中將UserArgumentResolver類的實例添加進argumentResolvers參數中即可。

這兩個類完成后,controller類中的toList方法如第一段注釋代碼所示。

/** * @author hsw * @Date 10:25 2018/5/8 */@Servicepublic class UserArgumentResolver implements HandlerMethodArgumentResolver {   @Autowired  MiaoshaUserService userService;   /*   * Miaoshauser類做參數校驗   * @author hsw   * @date 2018/5/8 10:49   * @param [methodParameter]   * @return boolean   */  @Override  public boolean supportsParameter(MethodParameter methodParameter) {    Class<?> clazz = methodParameter.getParameterType();//如若不是MiaoshaUser類不進行接下來操作    return clazz == MiaoshaUser.class;  }   @Override  public Object resolveArgument(MethodParameter methodParameter,                 ModelAndViewContainer modelAndViewContainer,                 NativeWebRequest nativeWebRequest,                 WebDataBinderFactory webDataBinderFactory) throws Exception {    HttpServletRequest request =nativeWebRequest.getNativeRequest(HttpServletRequest.class);//獲取HttpServletRequest    HttpServletResponse response =nativeWebRequest.getNativeResponse(HttpServletResponse.class);//獲取HttpServletResponse      String paramToken = request.getParameter(MiaoshaUserServiceImpl.COOKIE_NAME_TOKEN);    String cookieToken = getCookieValue(request,MiaoshaUserServiceImpl.COOKIE_NAME_TOKEN);    if(StringUtils.isEmpty(cookieToken) && StringUtils.isEmpty(paramToken)){      return null;    }     String token = StringUtils.isEmpty(paramToken)?cookieToken:paramToken;    return userService.getByToken(response,token);//通過token查詢詳細信息并返回,返回類為MiaoshaUser  }   private String getCookieValue(HttpServletRequest request, String cookieName) {    Cookie[] cookies = request.getCookies();    for(Cookie cookie:cookies){      if(cookie.getName().equals(cookieName)){        return cookie.getValue();      }    }    return null;  }}

看完上述內容,你們對SpringBoot中怎么利用WebMvcConfigurer實現參數校驗有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

团风县| 道孚县| 祥云县| 威信县| 金川县| 铜鼓县| 新疆| 勐海县| 鹤岗市| 石柱| 金川县| 讷河市| 涟源市| 黄龙县| 历史| 桐乡市| 凤凰县| 钟祥市| 潼关县| 广宗县| 大同县| 和顺县| 巴林左旗| 孟州市| 图们市| 德钦县| 江北区| 崇仁县| 乌拉特前旗| 石柱| 武隆县| 华容县| 枣强县| 岳池县| 凌源市| 三原县| 铜陵市| 雅安市| 赤峰市| 即墨市| 黎平县|