首页 > 其他分享 >spring-HandlerMethodArgumentResolver-参数解析器

spring-HandlerMethodArgumentResolver-参数解析器

时间:2024-03-07 16:11:20浏览次数:27  
标签:解析器 spring 参数 resolveArgument HandlerMethodArgumentResolver parameter public

1,参数解析器介绍

  HandlerMehtodArgumentResolver ,中文成为方法参数解析器,是 SpringMvc 组件的众多解析器之一,主要用来对 Controller 的方法参数进行处理。

2,参数解析器的使用

1,实现 HandlerMethodArgumentResolver,自定义解析器

public class MyHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {

    /**
     * 判断 Controller 层中的参数,返回 true 则执行 resolveArgument(),返回 false 则跳过
     * */
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return true;
    }

    /**
     * 用于处理一些业务,将返回值赋值给Controller层中的这个参数。
     * */
    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {

        System.out.println("获取到参数类型:" + parameter.getParameterType().getName());

        //获取 request, 获取参数值
        HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
        String parameterValue = request.getParameter(parameter.getParameterName());

        System.out.println("获取到参数值:" + parameterValue);
        return "经过了参数解析器:" + parameterValue;
    }
}

方法:

supportsParameter():检查是否需要进行参数解析

resolveArgument():将方法参数解析为给定请求的参数值

参数:

MethodParameter parameter: 要解析的方法参数对象,可以从对象获取参数的属性(如参数的类型,所修饰的注解等)

ModelAndViewContainer mavContainer: 当前请求的 ModelAndViewContainer 容器

NativeWebRequest webRequest: 当前的请求实体

WebDataBinderFactory binderFactory: 实例创建工厂

2,配置类中注册自定义参数解析器

@Configuration
public class DefaultWebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
        resolvers.add(new MyHandlerMethodArgumentResolver());
    }
}

标签:解析器,spring,参数,resolveArgument,HandlerMethodArgumentResolver,parameter,public
From: https://www.cnblogs.com/cnff/p/17077230.html

相关文章

  • Spring-@Validated-参数校验
    1.什么是javax.validationJSR303是一套JavaBean参数校验的标准,它定义了很多常用的校验注解,我们可以直接将这些注解加在我们JavaBean的属性上面(面向注解编程的时代),就可以在需要校验的时候进行校验了,在SpringBoot中已经包含在starter-web中,再其他项目中可以引用依赖,并自行......
  • Springcloud Alibaba-8-链路追踪
    1.基本概念在微服务架构中,一个请求可能需要调用很多个服务,若其中出现了错误很难去定位。链路追踪,就是将一次分布式请求还原成调用链路,进行日志记录,性能监控并将一次分布式请求的调用情况集中展示。比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等......
  • Spring反序列化失败 Type definition error: [simple type, class xxx.xxx.xxx]
    也许更好的阅读体验Typedefinitionerror:[simpletype,classcom.elm.po.CommonResult];nestedexceptioniscom.fasterxml.jackson.databind.exc.InvalidDefinitionException:Cannotconstructinstanceofcom.elm.po.CommonResult(noCreators,likedefaultconstru......
  • SpringBoot使用外部Web容器的解决方案
    SpringBoot默认内嵌了Web容器(如Tomcat、Jetty或Undertow),这使得应用可以作为独立的可执行JAR或WAR文件运行,无需外部Web容器。然而,在某些情况下,你可能想要将SpringBoot应用部署到外部的Web容器中,比如ApacheTomcat或Jetty。嵌入式的Web容器:应用可以打包成可执行的Jar。优点:简单......
  • META-INF/spring.factories自动化配置
    META-INF/spring.factories文件是SpringBoot项目中非常重要的一个文件,用于声明各种自动配置类、监听器、初始化器等。这个文件通常用来启用和配置各种SpringBoot自动配置模块。具体来说,spring.factories文件采用Java的属性文件格式,其中包含了多个键值对,每个键代表一个......
  • 玩转SpringBoot:SpringBoot的几种定时任务实现方式
    引言在现代软件开发中,定时任务是一种常见的需求,用于执行周期性的任务或在特定的时间点执行任务。这些任务可能涉及数据同步、数据备份、报表生成、缓存刷新等方面,对系统的稳定性和可靠性有着重要的影响。SpringBoot提供了强大且简单的定时任务功能,使开发人员能够轻松地管理和执......
  • spring - string
    spring-string1.string在Java8及之前的版本中,字符串由不可变的Unicode字符数组组成。然而,大多数字符只需要8位(1个字节)来表示它们,而不是16位(字符大小)。为了改善内存消耗和性能,Java9引入了紧凑字符串。这意味着如果字符串仅包含1字节字符,它将使用Latin-1编码表示......
  • 从零开始搭建Springboot开发环境(Java8+Git+Maven+MySQL+Idea)之一步到位
    说明所谓万事开头难,对于初学Java和Springboot框架的小伙伴往往会花不少时间在开发环境搭建上面。究其原因其实还是不熟悉,作为在IT界摸爬滚打数年的老司机,对于各种开发环境搭建已经了然于胸,自己当年也是这么过来的。今天我就毕其功于一役,解放大家的时间,让凡人的环境配置见鬼去吧......
  • 利用SpringAMQP依赖使用RabbitMQ
    消息消费端和提供端需要引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>都需要在application.yml进行如下配置spring:rabbitmq:host:192.168.230.100#r......
  • 如何构建Spring父工程
    父工程建一个最简单的Newproject就可以了,不需要生成SpringInitializr模板父工程的用处就是对子工程的maven进行管理,所以关键的文件只有一个pom.xml,一共就两个配置1、一个在<modules>标签下写入所有要管理的子工程,用于聚合2、将打包方式更改为pom<?xmlversion="1.0"encodin......