栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot自定义参数解析器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot自定义参数解析器

SpringBoot自定义参数解析器

我们都知道SpringMvc的Controller的方法上可以接收各种各样的参数,比如**HttpServletRequest或HttpServletResponse*,各种注解@RequestParam、@RequestHeader、

@RequestBody、@PathVariable、@ModelAttribute,这些参数是从哪里获取的?

这些参数都是由不同的参数解析器为我们解析出来的,可以解析类也可以解析带注解的类

  • 我们可以利用解析器解析自定义的参数(类、注解),在我们需要的传入的controller方法上传入它(不需要每次都要在方法内部通过request、response等参数做一系列操作来获取该类对象)
添加解析器
  • 我们想要自定义解析参数的时候我们就需要通过更改SpringBoot的配置来添加自己实现的解析类

自定义配置类实现WebMvcConfigurer接口,重写其中的addArgumentResolvers方法来添加自己的解析类(通过自动注入的方法注入)

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    private UserArgumentResolver userArgumentResolver;

    @Override
    public void addArgumentResolvers(List resolvers) {
        resolvers.add(userArgumentResolver);
    }
  
  @Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    private UserArgumentResolver userArgumentResolver;

    @Override
    public void addArgumentResolvers(List resolvers) {
        resolvers.add(userArgumentResolver);
    }

  	//放行资源
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("
@Component
public class UserArgumentResolver implements HandlerMethodArgumentResolver {

    @Autowired
    private UserService userService;

    //他为true,才会执行下面的方法,否则不执行
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        Class clazz = parameter.getParameterType();
        return clazz== User.class;
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
        HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class);
        String ticket = cookieUtil.getcookievalue(request, "userTicket");
        if(StringUtils.isEmpty(ticket)){
            return null;
        }
        return userService.getUserBycookie(ticket,request,response);
    }
}

到此,一个自定义参数解析器就实现好了,我们可以通过传入参数的形式直接通过解析器帮我们获取到

解析对象的使用
  • 我们在controller方法中传入该参数,可以直接为我们获取到User对象
@RequestMapping("/to_list")
    public String toList(Model model,User user){
      System.out.println(user);
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/337234.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号