WebMvcConfigurerAdapter

这篇具有很好参考价值的文章主要介绍了WebMvcConfigurerAdapter。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

WebMvcConfigurerAdapter 是Spring 3.1到Spring 5.0版本中用于自定义Spring MVC配置的一个便捷适配器类。在Spring 5.0及之后的版本中,WebMvcConfigurerAdapter 已经被标记为过时(deprecated),并且官方推荐直接实现 WebMvcConfigurer 接口。不过,对于老版本的Spring来说,WebMvcConfigurerAdapter 提供了一个简单的方法来扩展Spring MVC的默认配置而不用实现所有的方法。

通过扩展 WebMvcConfigurerAdapter 并重写其中的方法,开发者可以添加或自定义Spring MVC配置,例如:

注册自定义的视图控制器(View Controllers)
添加静态资源处理器(Static Resources Handlers)
配置默认的Servlet处理
添加拦截器(Interceptors)
添加格式化器和转换器(Formatters and Converters)
添加验证器(Validators)
配置消息转换器(Message Converters)
配置视图解析器(View Resolvers)
配置跨域请求处理(CORS)
例子
在Spring 5.0之前,你可以通过扩展 WebMvcConfigurerAdapter 来自定义Spring MVC配置:

import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class MyWebConfig extends WebMvcConfigurerAdapter {

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new MyCustomInterceptor());
}

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}

// 其他覆盖方法...

}
在Spring 5.0及之后的版本
从Spring 5.0开始,应该使用 WebMvcConfigurer 接口。你可以直接实现这个接口,并重写你需要自定义的方法。Java 8的接口默认方法使得这个过程变得更加简单,因为你不需要实现所有的方法,只需要重写你感兴趣的那些。下面是一个使用 WebMvcConfigurer 接口的例子:

import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MyWebConfig implements WebMvcConfigurer {

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new MyCustomInterceptor());
}

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}

// 其他自定义方法...

}
在新的Spring版本中使用 WebMvcConfigurer 而不是 WebMvcConfigurerAdapter 是一个更好的实践,因为这避免了依赖过时的类,并且更加符合Spring框架的未来方向。

MappingJackson2HttpMessageConverter 是Spring框架中用于处理HTTP请求和响应中JSON数据的一个类。它是 HttpMessageConverter 接口的具体实现,使用Jackson 2.x库将Java对象序列化为JSON格式以及将JSON格式的数据反序列化为Java对象。

在Spring MVC和Spring Boot中,MappingJackson2HttpMessageConverter 主要负责以下任务:

请求体读取:当客户端发送一个请求,且Content-Type为application/json时,MappingJackson2HttpMessageConverter 会将JSON格式的请求体数据转换成相应的Java对象,以便控制器方法可以处理这些数据。

响应体写入:当控制器方法处理完请求并返回一个Java对象时,如果这个控制器方法使用了 @ResponseBody 注解标注,或者在Spring Boot中,由于默认已配置了 @RestController,MappingJackson2HttpMessageConverter 会自动将Java对象序列化为JSON格式的字符串,并将其写入HTTP响应体中。

内容协商:在Spring MVC中,基于请求的Accept头部或Content-Type头部,MappingJackson2HttpMessageConverter 与其他消息转换器一起参与内容协商,从而根据客户端期望的内容类型提供适当的响应。

工作原理
在Spring的web应用程序中,DispatcherServlet 处理传入的HTTP请求,并协调其他组件来生成响应。在这个处理过程中,HandlerAdapter 调用控制器方法,并且在这之后,它会检查该方法是否有 @ResponseBody 注解或者响应类型是否为 ResponseEntity。如果是这样,DispatcherServlet 会使用可用的 HttpMessageConverter 实例来写入响应。

MappingJackson2HttpMessageConverter 就是这些 HttpMessageConverter 实现之一。Spring会根据请求或响应的MIME类型自动选择合适的转换器。

例如,当控制器方法返回一个对象,并且客户端请求的Accept头部为 application/json 或未指定时,MappingJackson2HttpMessageConverter 会接管并将对象转换为JSON。

配置和定制
在Spring Boot应用程序中,MappingJackson2HttpMessageConverter 通常是自动配置的,你无需手动添加。不过,你可以通过定制 ObjectMapper 来改变JSON的序列化和反序列化行为。下面是一个如何定制 ObjectMapper 的例子:

@Bean
public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
return builder -> {
builder.simpleDateFormat(“yyyy-MM-dd”);
builder.serializers(new CustomSerializer());
// 更多定制…
};
}
在不使用Spring Boot的Spring MVC应用程序中,你可能需要自己配置 MappingJackson2HttpMessageConverter。这通常涉及到将其声明为一个Bean并将其注册到 WebMvcConfigurer 接口实现中:

@Configuration
public class WebConfig implements WebMvcConfigurer {

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    converters.add(new MappingJackson2HttpMessageConverter());
}

// 其他配置...

}
通过使用 MappingJackson2HttpMessageConverter,Spring能够提供一种非常方便的方式来处理JSON数据,这在创建RESTful服务时尤其有用。文章来源地址https://www.toymoban.com/news/detail-813871.html

到了这里,关于WebMvcConfigurerAdapter的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java——Java面向对象

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架。 Java是面向对象的程序设计语言,Java语言提供了定义类、成员变量、方法等最基本的功能。

    2024年02月02日
    浏览(43)
  • 【Java基础】Java总览

          Java是一种面向对象的编程语言,其他面向对象的编程语言还有C#,C++,Python,Python,golang,VB等。 对比项语言 C C++ Java 上线时间 1972年 1979年 1995年 特点 面向过程 面向对象 面向对象 特点 不需要任何运行环境; 编译简单,产生少量机器码; 移植性; 丰富的数据结构;

    2023年04月24日
    浏览(36)
  • 安装Java8和Java17共存,如何自由切换Java版本?

    官方下载地址:https://www.oracle.com/java/technologies/downloads/ 根据需要选择要下载的Java版本 安装过程省略,有需要的可自行百度 … 找到自己java安装的目录 进入Java jdk的bin目录,如:C:java8jdk1.8.0_331bin,将java.exe改为java8.exe 同样的方式去修改java17的java文件名称 将Java8和Java17的b

    2024年02月09日
    浏览(57)
  • Java实现的五子棋游戏 ~java.awt&java.swing

    作业要求: (1)课题代号: 2 (2)课题名称: 2D 游戏设计 (3)课题要求:设计一种二维游戏(如数独,扫雷,飞机大战,贪食蛇,五子棋等),完成界面设计和必要的游戏功能 以下主要实现的功能有: 一、下棋功能,在棋盘的交点处落子。 二、简单人机对战功能。 1.实现

    2024年02月09日
    浏览(43)
  • 多个 JDK 版本(Java 8、Java 17、Java 21)下载和切换

    随着 Spring Boot 的版本不断迭代更新,新发布的 Spring Boot 版本已经不再支持 JDK 8, 对 JDK 版本的最低要求为 17 。 所以,为了在实际中可以任意选择所需的 JDK 版本,将 多个 JDK 版本切换的方法 总结如下: JDK 不同版本可以在 Oracle 官网下载, 下载地址 :点此进入 选择所需的

    2024年02月03日
    浏览(56)
  • Java集合-Java集合基础

    目录 讲一讲Java集合吧 集合的使用 为什么要使用集合? 如何选用集合? Collection Collection与Collections的区别是什么? Collections.sort和Arrays.sort的实现原理 为何Collection不从Cloneable和Serializable接口继承? 线程安全集合类 哪些集合类是线程安全的?哪些不安全? 怎么确保一个集合不

    2024年02月03日
    浏览(39)
  • java安全——Java 默认沙箱

    Java 默认沙箱 程序设计者或者管理员通过改变沙箱的参数从而完成权限的变动更新 Java默认沙箱的设计目的是为了保护系统和用户的安全。Java虚拟机提供了一种机制,让Java应用程序在一个受限的环境中运行,也就是“沙箱”。这个沙箱能够在应用程序中启用一些安全管理功能

    2024年02月13日
    浏览(38)
  • 【Java】 Java设计模式

    白白胖胖,充满希望~ Java工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需将对象的创建逻辑暴露给客户端代码。工厂模式通过定义一个工厂方法来创建对象,而客户端只需要调用该工厂方法即可获得所需对象,从而实现了对象的创

    2024年02月09日
    浏览(47)
  • 初识Java--Java数据类型

    java数据类型主要分为 基本数据类型 和 引用数据类型 基本数据类型有四种①整型②浮点型③字符型④布尔型 字符串类型属于引用型数据类型 数据类型 所占字节 范围 字节型 byte 1字节 -128~127 短整型 short 2字节 -32768~32767 整型 int 4字节 -2 31 ~2 31 -1 长整型 long 8字节 -2 6

    2024年02月08日
    浏览(41)
  • 【Java】Java中的多态

    在Java中,多态是面向对象编程中的一个重要概念,它 允许不同类型的对象对同一方法进行不同的实现 。具体来说, 多态性指的是通过父类的引用变量来引用子类的对象,从而实现对不同对象的统一操作 。 例如:狗和猫都是动物,动物共同的行为都有吃这个动作,而狗可以

    2024年02月10日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包