org.springframework.http.converter.json.MappingJackson2HttpMessageConverter

我们知道Springmvc默认返回的是一个视图,而在前后端分离的开发模式中,我们经常使用Json格式的数据进行前后端数据的交换。通常情况下有两种方式去构建一个Json格式的响应数据,第一种是直接手动拼接Json格式的字符串,然后以String返回,第二种是使用对象转换器来完成对象与Json数据的转换。
第一种方式太low了,我们来说第二种方式,通过@ResponseBody注解和MappingJackson2HttpMessageConverter来完成 对象到Json串的转换。

依赖:

<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-annotations</artifactId>
	<version>2.5.4</version>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-core</artifactId>
	<version>2.5.4</version>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.5.4</version>
</dependency>

spring的配置文件中配置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>
					</bean>
				</property>
			</bean>
		</mvc:message-converters>
	</mvc:annotation-driven>

先来看三个接口描述:
这里写图片描述

  • 不使用@ResponseBodySpringmvc默认是返回一个视图,因此第一个会报错

    这里写图片描述

  • 返回自定义的Json串

    这里写图片描述

  • 使用Json转换器

    这里写图片描述

总结:

  1. 返回前端一个对象时,MappingJackson2HttpMessageConverter会自动将对象转换成Json格式数据,并且我们可以指定转换器的一些属性,例如上面指定了日期格式。

  2. 我们在使用com.fasterxml.jackson.databind.ObjectMapper进行对象和json的转换时,对于jsonList的操作,应该用下面的这种方法:

    import com.fasterxml.jackson.core.type.TypeReference;
    import com.fasterxml.jackson.databind.DeserializationFeature;
    import com.fasterxml.jackson.databind.ObjectMapper;
    List<User> userList = new ArrayList<>();
    userList.add(new User("zhangsan",18));
    userList.add(new User("lisi",19));
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    try {
    	// 集合转json
        String userJson = mapper.writeValueAsString(userList);
        // json转集合
        List<User> users = mapper.readValue(userJson,new TypeReference<List<User>>() { });
        System.out.println(users);
    } catch (IOException e) {
        e.printStackTrace();
    }
    
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
package com.github.wxiaoqi.security.gate.config; import feign.codec.Decoder; import org.springframework.beans.BeansException; import org.springframework.beans.factory.ObjectFactory; import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.openfeign.support.ResponseEntityDecoder; import org.springframework.cloud.openfeign.support.SpringDecoder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.client.RestTemplate; import org.springframework.web.reactive.function.client.WebClient; import java.util.ArrayList; import java.util.List; /** * @author ace * @create 2019/1/27. */ @Configuration public class GatewayConfig { /** * 负载均衡注解 * @return */ @LoadBalanced @Bean public RestTemplate restTemplate() { return new RestTemplate(); } @Bean public Decoder feignDecoder() { return new ResponseEntityDecoder(new SpringDecoder(feignHttpMessageConverter())); } public ObjectFactory<HttpMessageConverters> feignHttpMessageConverter() { final HttpMessageConverters httpMessageConverters = new HttpMessageConverters(new GateWayMappingJackson2HttpMessageConverter()); return new ObjectFactory<HttpMessageConverters>() { @Override public HttpMessageConverters getObject() throws BeansException { return httpMessageConverters; } }; } public class GateWayMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter { GateWayMappingJackson2HttpMessageConverter(){ List<MediaType> mediaTypes = new ArrayList<>(); mediaTypes.add(MediaType.valueOf(MediaType.TEXT_HTML_VALUE + ";charset=UTF-8")); setSupportedMediaTypes(mediaTypes); } } @Bean @LoadBalanced public WebClient.Builder loadBalancedWebClientBuilder() { return WebClient.builder(); } }
06-07

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值