我是靠谱客的博主 健忘老师,最近开发中收集的这篇文章主要介绍Spring mvc源码之HandlerMethodArgumentResolver自定义参数解析器主要实现类,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 自定义参数解析器
    • 自定义注解
    • 自定义解释器实现
    • 使用
  • 主要实现类
    • AbstractMessageConverterMethodArgumentResolver
    • AbstractMessageConverterMethodProcessor
    • HttpEntityMethodProcessor

HandlerMethodArgumentResolver 类实现的主要功能是,将 HttpServletRequest(header + body 中的内容)解析为HandlerMethod方法的参数

自定义参数解析器

自定义注解

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface CustomerArgument {
    String name() default "";
}

自定义解释器实现

public class MyArgumentsResolver implements HandlerMethodArgumentResolver {

   @Override
   public boolean supportsParameter(MethodParameter parameter) {
       // 是否支持当前参数
       return parameter.hasParameterAnnotation(CustomerArgument .class);
   }
   /**
    * 解析参数
    */
   @Override
   public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
                                 NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
       //具体的解析逻辑
       return null;
   }
}

使用

@RequestMapping(value = "getAccountByOpen")
   @ResponseBody
  
   public String getAccountByOpenId(@CustomerArgument String arg) {
       return arg;
   }

主要实现类

RequestParamMapMethodArgumentResolver处理@RequestParam
RequestHeaderMapMethodArgumentResolver处理@RequestHeader
PathVariableMapMethodArgumentResolver处理@PathVariable
ModelAttributeMethodProcessor处理@ModelAttribute
RequestResponseBodyMethodProcessor处理@RequestBody

AbstractMessageConverterMethodArgumentResolver

AbstractMessageConverterMethodArgumentResolver引入了HttpMessageConverter,即转换的工作有这些HttpMessageConverter来完成具体的转换和判断由子类来实现。

public abstract class AbstractMessageConverterMethodArgumentResolver implements HandlerMethodArgumentResolver {  
  
    protected final Log logger = LogFactory.getLog(getClass());  
  
    protected final List<HttpMessageConverter<?>> messageConverters;  
  
    protected final List<MediaType> allSupportedMediaTypes;  
     //略  
}  

AbstractMessageConverterMethodProcessor

AbstractMessageConverterMethodProcessor继承AbstractMessageConverterMethodArgumentResolver仅仅是加入了对响应数据进行转换的支持。

HttpEntityMethodProcessor

HttpEntityMethodProcessor继承AbstractMessageConverterMethodProcessor,支持请求和响应的转换

最后

以上就是健忘老师为你收集整理的Spring mvc源码之HandlerMethodArgumentResolver自定义参数解析器主要实现类的全部内容,希望文章能够帮你解决Spring mvc源码之HandlerMethodArgumentResolver自定义参数解析器主要实现类所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部