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

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

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

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

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

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

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

首先附上代碼。

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

下面通過實現(xiàn)WebMvcConfigurer接口來實現(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);
  }
 
}

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

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

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

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

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

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

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

/**
 * @author hsw
 * @Date 10:25 2018/5/8
 */
@Service
public class UserArgumentResolver implements HandlerMethodArgumentResolver {
 
  @Autowired
  MiaoshaUserService userService;
 
  /*
   * Miaoshauser類做參數(shù)校驗
   * @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查詢詳細(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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

    JSqlParse完整介紹

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

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

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

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

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

    實例詳解MyBatis-plus自動填充功能

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

    Spring MVC 處理Ajax請求的方式詳解

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

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

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

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

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

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

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

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

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

最新評論

蚌埠市| 呈贡县| 广南县| 松原市| 恩平市| 安西县| 林西县| 弋阳县| 宜黄县| 龙陵县| 禄劝| 行唐县| 枞阳县| 永州市| 铜梁县| 镇安县| 资阳市| 平安县| 抚松县| 佛教| 巴彦淖尔市| 峨边| 游戏| 神池县| 榆中县| 琼海市| 平邑县| 曲靖市| 将乐县| 临漳县| 商洛市| 新密市| 海伦市| 黑龙江省| 新河县| 锦屏县| 宜黄县| 荃湾区| 石狮市| 中卫市| 平泉县|