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

Spring自定义参数解析注解——以解析请求头中的token为例

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

Spring自定义参数解析注解——以解析请求头中的token为例

写在前面

有的时候会好奇@RequestBody、@RequestParam注解是怎么获取方法的,今天学习之后尝试使用一下。
首先需要明确的是在SpringMVC自带了很多参数解析器:

上面只是其中一部分。
所以显然我们下面要做的就是自定义解析器,并加入到执行器中去

具体操作
  1. 首先第一步,完成我们需要的注解
    两个注解表示作用在参数上,运行期有效。
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyToken {
}
  1. 创建解析器
    创建只需要实现HandlerMethodArgumentResolver 接口,重写两个方法,
    supportsParameter方法表示判断参数上是否有该注解,
    resolveArgument表示返回解析之后的结果,参数列表里已经给到了大多数我们可能用到的
public class TokenArgumentResolver implements HandlerMethodArgumentResolver {
    //看是否支持某个注解
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        MyToken token = parameter.getParameterAnnotation(MyToken.class);
        return token != null;
    }
    //解析参数
    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
    	//返回请求头中的token
        return webRequest.getHeader("token");
    }
}
  1. 加入到参数解析器
@Configuration
@ComponentScan
public class Config{
    @Bean
    public RequestMappingHandlerAdapter RequestMappingHandlerAdapter(){
    	//获取执行器
        RequestMappingHandlerAdapter handlerAdapter = new RequestMappingHandlerAdapter();
        TokenArgumentResolver tokenArgumentResolver = new TokenArgumentResolver();
        List handlerMethodArgumentResolvers = new ArrayList<>();
        handlerMethodArgumentResolvers.add(tokenArgumentResolver);
        //加入自定义的Token解析器
      	handlerAdapter.setCustomArgumentResolvers(handlerMethodArgumentResolvers);
        return handlerAdapter;
    }
}

至此,配置已经完成!我们可以用自定义的@Token注解了

测试

用ajax发送携带token的请求:



后台写一个controller接受

    @PostMapping("/test3")
    @ResponseBody
    public String test3(@MyToken String token,HttpServletRequest request) {
        if(token == null){
            log.info("无");
        }else {
            log.info("token值:"+token);
        }
        log.info("test3({})", token);
        return token;
    }

运行结果:


至此,就完成了参数解析器的实现。

参考

黑马

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1035064.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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