在SpringMVC中配置消息转换器和三方消息转换器

已过时的配置方式:AnnotationMethodHandlerAdapter

https://blog.csdn.net/dailingnan0827/article/details/54928552 

<!-- AnnotationMethodHandlerAdapter已经过时 -->
<bean
      class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
            	<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
               <!--   <ref bean="mappingJacksonHttpMessageConverter" />-->
            </list>
        </property>
    </bean>

 

现在使用的配置方式:RequestMappingHandlerAdapter

https://www.cnblogs.com/qinglangyijiu/p/7742344.html

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
  <property name="messageConverters">
   <list >
      <ref bean="mappingJacksonHttpMessageConverter" />
   </list>
  </property>
 </bean>
 <bean id="mappingJacksonHttpMessageConverter"
  class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
  <property name="supportedMediaTypes">
   <list>
    <value>text/html;charset=UTF-8</value>
   </list>
  </property>
 </bean>

 或者使用这种方式:

<mvc:annotation-driven>
        <mvc:message-converters>
            <ref bean="stringHttpMessageConverter"/>
            <ref bean="mappingJackson2HttpMessageConverter"/>
        </mvc:message-converters>
    </mvc:annotation-driven>

<bean id="stringHttpMessageConverter"
          class="org.springframework.http.converter.StringHttpMessageConverter"/>

    <!--解决IE浏览器json文件下载和json数据中午乱码的问题-->
<bean id="mappingJackson2HttpMessageConverter"
         class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/html;charset=UTF-8</value>
            </list>
        </property>
</bean>

 使用三方的消息转换器[fastJson]:

https://blog.csdn.net/u014520745/article/details/73147702

<mvc:annotation-driven>
    <!--设置不使用默认的消息转换器-->
    <mvc:message-converters register-defaults="false">
        <!--配置spring的转换器-->
        <bean class="org.springframework.http.converter.StringHttpMessageConverter" />

        <bean class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter" />

        <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />

        <bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter" />

        <!--配置fastjson中实现HttpMessageConverter接口的转换器-->
        <bean id="fastJsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4" >
            <!--加入支持的媒体类型,返回contentType-->
            <property name="supportedMediaTypes">
                <list>
                    <!--这里顺序不能反,一定要先写text/html,不然IE下会出现下载提示-->
                    <value>text/html;charset=UTF-8</value>
                    <value>application/json;charset=UTF-8</value>
                </list>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

https://blog.csdn.net/yfisaboy/article/details/31755631

新增一个关于日期消息转换的转化器,然后注册给Spring

想自定义其他的消息转换器,可以继承更加通用的抽象接口AbstractHttpMessageConverter

https://www.cnblogs.com/fingerboy/p/7753577.html

https://www.cnblogs.com/zfding/p/8322382.html

https://blog.csdn.net/z69183787/article/details/78654678

日期转换方式一【缺点是每个日期属性可能都需要去配置,优点就是简单】:

使用@JsonFormat注解,如下面的例子

class User implements Serializable {
    
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JsonInclude(value = Include.NON_NULL)
    private Date birthday;
    //...
}

日期转换方式二【一次配置全局使用,复杂点】:

public class XXXMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {

    public XXXMappingJackson2HttpMessageConverter() {
        this.objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        this.objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
        this.objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    }
}
<mvc:annotation-driven>
     <mvc:message-converters>
          <bean class="cn.xxx.XXXMappingJackson2HttpMessageConverter"/>
     </mvc:message-converters>
</mvc:annotation-driven>

或者这样配置:

<bean  class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
      <property name="messageConverters">
           <list>
                <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
                <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                    <property name="writeAcceptCharset" value="false"/>
                </bean>
                <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
                <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/>
                <bean class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter"/>
                <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/>
                <bean class="cn.xxx.XXXMappingJackson2HttpMessageConverter"/>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
          </list>
      </property>
</bean>

日志转换方式三: 或者直接在MappingJackson2HttpMessageConverter指定日期格式转换格式【一次配置全局使用,复杂点】

 <mvc:annotation-driven>
		<mvc:message-converters>
			<bean
				class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
				<property name="objectMapper">
					<bean class="com.fasterxml.jackson.databind.ObjectMapper">
						<property name="dateFormat"> <bean class="java.text.SimpleDateFormat"> 
							<constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" /> </bean> 
						</property>
						<property name="serializationInclusion">
							<value
								type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value>
						</property>
					</bean>
				</property>
			</bean>
	</mvc:message-converters>
</mvc:annotation-driven>

扩展:在SpringBoot中的配置:

 

apllication.property文件:
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8


apllication.yml文件:
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

配置FastJSON在SpringBoot中:

@Bean
public HttpMessageConverters fastJsonHttpMessageConverters() {
	// 1、需要先定义一个 convert 转换消息的对象;
	FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
	
	//2、添加fastJson 的配置信息,比如:是否要格式化返回的json数据;
	FastJsonConfig fastJsonConfig = new FastJsonConfig();
	fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
	
	//3、在convert中添加配置信息.
	fastConverter.setFastJsonConfig(fastJsonConfig);
	
	HttpMessageConverter<?> converter = fastConverter;
	return new HttpMessageConverters(converter);
}

 

********************************* 不积跬步无以至千里,不积小流无以成江海 *********************************

A:在Spring MVC配置消息转换器需要以下步骤: 1. 添加依赖:在Maven项目添加以下依赖: ``` <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> ``` 其, `${spring.version}` 和 `${jackson.version}` 分别表示 Spring 和 Jackson 的版本号。 2. 配置转换器:在 Spring MVC 的配置文件添加如下配置: ``` @Configuration @EnableWebMvc public class WebMvcConfig implements WebMvcConfigurer { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(mappingJackson2HttpMessageConverter()); } @Bean public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setObjectMapper(objectMapper()); return converter; } @Bean public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.enable(SerializationFeature.INDENT_OUTPUT); return objectMapper; } } ``` 注意 `configureMessageConverters` 方法需要添加 `@Override` 注解,`mappingJackson2HttpMessageConverter` 方法和 `objectMapper` 方法都需要使用 `@Bean` 注解。其,`MappingJackson2HttpMessageConverter` 是一个消息转换器,用于将 Java 对象转换成 JSON 格式的数据。 3. 测试转换器:现在,您可以在控制器类使用 `@RestController` 注解来实现 RESTful API,并返回对象,消息转换器将自动将其转换为 JSON。例如: ``` @RestController public class UserController { @GetMapping("/user") public User getUser() { return new User("张三", 20); } } class User { private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } // getter 和 setter 省略 } ``` 现在,您可以在浏览器访问 `http://localhost:8080/user`,将会返回以下 JSON 数据: ``` { "name": "张三", "age": 20 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值