最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot中通過實(shí)現(xiàn)WebMvcConfigurer參數(shù)校驗(yàn)的方法示例

 更新時(shí)間:2019年11月21日 14:58:00   作者:hhsway  
這篇文章主要介紹了SpringBoot中通過實(shí)現(xiàn)WebMvcConfigurer參數(shù)校驗(yàn)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在Spring5.0和SpringBoot2.0中廢棄了WebMvcConfigurerAdapter類。

現(xiàn)有兩種解決方案

1 直接實(shí)現(xiàn)WebMvcConfigurer (官方推薦)
2 直接繼承WebMvcConfigurationSupport

本篇文章討論下使用第一種方式完成參數(shù)校驗(yàn)。

首先附上代碼。

@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需要實(shí)現(xiàn)的功能是在cookie或requestParam中獲取到token,通過token去redis中獲取詳細(xì)的用戶信息,再將用戶信息放到頁面進(jìn)行展示。上面?zhèn)鹘y(tǒng)的方式入?yún)⒂蟹浅6?,最后需要的是拿到MiaohshaUser對(duì)象,在程序的實(shí)際編寫過程中,會(huì)有許多方法需要經(jīng)過這樣的過程獲取到該對(duì)象,如何精簡下代碼,在入?yún)⒅挥行枰@取的對(duì)象的時(shí)候,經(jīng)過一系列的操作從cookie拿到token以及redis獲取具體對(duì)象呢?

下面通過實(shí)現(xiàn)WebMvcConfigurer接口來實(shí)現(xiàn)。

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

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

addArgumentResolvers具體內(nèi)容后文會(huì)提到。

新建UserArgumentResolver類實(shí)現(xiàn)HandlerMethodArgumentResolver接口

實(shí)現(xiàn)HandlerMethodArgumentResolver接口需要重寫supportsParameter方法和resolveArgument方法。

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

UserArgumentResolver類編寫完成后,在上面的WebConfig類中的addArgumentResolvers方法中將UserArgumentResolver類的實(shí)例添加進(jìn)argumentResolvers參數(shù)中即可。

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

/**
 * @author hsw
 * @Date 10:25 2018/5/8
 */
@Service
public class UserArgumentResolver implements HandlerMethodArgumentResolver {
 
  @Autowired
  MiaoshaUserService userService;
 
  /*
   * Miaoshauser類做參數(shù)校驗(yàn)
   * @author hsw
   * @date 2018/5/8 10:49
   * @param [methodParameter]
   * @return boolean
   */
  @Override
  public boolean supportsParameter(MethodParameter methodParameter) {
    Class<?> clazz = methodParameter.getParameterType();//如若不是MiaoshaUser類不進(jìn)行接下來操作
    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查詢?cè)敿?xì)信息并返回,返回類為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;
  }
}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中生成隨機(jī)數(shù)的4種方式與區(qū)別詳解

    Java中生成隨機(jī)數(shù)的4種方式與區(qū)別詳解

    生成隨機(jī)數(shù)是我們?nèi)粘i_發(fā)經(jīng)常會(huì)遇到的一個(gè)功能,這篇文章主要給大家介紹了關(guān)于Java中生成隨機(jī)數(shù)的4種方式與區(qū)別、應(yīng)用場景的相關(guān)資料,4個(gè)方式分別是Random、ThreadLocalRandom、SecureRandom以及Math,需要的朋友可以參考下
    2021-06-06
  • JSqlParse完整介紹

    JSqlParse完整介紹

    JSqlParse是一款很精簡的sql解析工具,本文主要介紹了JSqlParse完整介紹,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • Java9中操作和查詢本地進(jìn)程信息的示例詳解

    Java9中操作和查詢本地進(jìn)程信息的示例詳解

    這篇文章主要為大家詳細(xì)介紹了Java9中操作和查詢本地進(jìn)程信息的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • SpringMVC框架實(shí)現(xiàn)Handler處理器的三種寫法

    SpringMVC框架實(shí)現(xiàn)Handler處理器的三種寫法

    這篇文章主要介紹了SpringMVC框架實(shí)現(xiàn)Handler處理器的三種寫法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 實(shí)例詳解MyBatis-plus自動(dòng)填充功能

    實(shí)例詳解MyBatis-plus自動(dòng)填充功能

    每次對(duì)數(shù)據(jù)進(jìn)行新增、刪除、修改時(shí)都需要對(duì)這些字段進(jìn)行設(shè)置,雖然新增時(shí)間和修改時(shí)間可以使用數(shù)據(jù)庫的時(shí)間,但是新增人和修改人就不能使用這樣的功能,下面小編給大家介紹下MyBatis-plus自動(dòng)填充功能的實(shí)例代碼,感興趣的朋友一起看看吧
    2022-01-01
  • Spring MVC 處理Ajax請(qǐng)求的方式詳解

    Spring MVC 處理Ajax請(qǐng)求的方式詳解

    本文介紹了在SpringMVC中處理Ajax請(qǐng)求的方法,主要依賴于Controller和返回類型的配置,使用@RequestMapping注解處理Ajax的控制器方法,本文給大家介紹Spring MVC 處理Ajax請(qǐng)求的方式,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • springboot + vue 實(shí)現(xiàn)遞歸生成多級(jí)菜單(實(shí)例代碼)

    springboot + vue 實(shí)現(xiàn)遞歸生成多級(jí)菜單(實(shí)例代碼)

    這篇文章主要介紹了springboot + vue 實(shí)現(xiàn)遞歸生成多級(jí)菜單,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • java 中平方根(sqrt)算法 的實(shí)例詳解

    java 中平方根(sqrt)算法 的實(shí)例詳解

    這篇文章主要介紹了java 中平方根(sqrt)算法 的實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java應(yīng)用EasyExcel工具類

    Java應(yīng)用EasyExcel工具類

    這篇文章主要介紹了Java應(yīng)用EasyExcel工具類,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有一定的幫助,需要的朋友可以參考下
    2021-05-05
  • java 多線程-鎖詳解及示例代碼

    java 多線程-鎖詳解及示例代碼

    本文主要介紹 Java 多線程鎖的基礎(chǔ)知識(shí),這里整理了相關(guān)資料及示例代碼有興趣的小伙伴可以參考下
    2016-09-09

最新評(píng)論

集贤县| 仁寿县| 白城市| 东乡族自治县| 台北县| 安福县| 上饶市| 侯马市| 庄河市| 吴桥县| 饶阳县| 融水| 中宁县| 娱乐| 怀宁县| 西藏| 雷山县| 崇仁县| 五常市| 区。| 镇远县| 新泰市| 介休市| 九寨沟县| 紫金县| 桐乡市| 龙江县| 孟津县| 疏附县| 靖江市| 清苑县| 宁化县| 高唐县| 罗甸县| 广河县| 五华县| 灵台县| 万荣县| 阿尔山市| 将乐县| 潜山县|