spring boot2 (30)-Jackson和ObjectMapper

在spring boot中,默认使用Jackson来实现java对象到json格式的序列化与反序列化。第3篇讲的@RequestBody和@ResponseBody的转换,最终都是由Jackson来完成的。

ObjectMapper基本用法

Jackson的转换是通过ObjectMapper对象来实现的,spring boot内部自动配置了一个ObjectMapper对象,我们可以直接用。

	@Autowired
	ObjectMapper objectMapper;
	
	@GetMapping("/hello")
	public void hello() throws IOException {
		
		User user1 = new User();
		user1.setId("1");
		user1.setName("tom");
		//序列化
		String json = objectMapper.writeValueAsString(user1);
		System.out.println(json);
		
		//反序列化
		User user2 = objectMapper.readValue(json, User.class);
		System.out.println(user2.getId());
		System.out.println(user2.getName());

writeValueAsString:是将参数中的java对象序列化为json字符串。

readValue:是将json字符串反序列化为java对象,User.class就是指定对象的类型。

最终输出如下


泛型的反序列化

上面的方法同样适用于集合类型,但如果是包含泛型的集合则需要使用以下两种方法之一
		String json = "[{\"id\":\"1\",\"name\":\"tom\"},{\"id\":\"2\",\"name\":\"jerry\"}]";
		JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, User.class);
		List<User> list = objectMapper.readValue(json, javaType);

或者

		String json = "[{\"id\":\"1\",\"name\":\"tom\"},{\"id\":\"2\",\"name\":\"jerry\"}]";
		List<User> list = objectMapper.readValue(json, new TypeReference<List<User>>() {});

properties常用参数配置

#日期类型格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
#日期类型使用中国时区
spring.jackson.time-zone=GMT+8
#序列化所有参数
spring.jackson.default-property-inclusion=always

spring.jackson.date-format:当序列化对象中包含日期类型的参数时,配置其转换的格式,如yyyy-MM-dd HH:mm:ss

spring.jackson.time-zone:有些日期数据可能并不是中国时区,设置GMT+8可将其转换为中国时区

spring.jackson.default-property-inclusion:需要进行序列化的参数,默认值为always指所有。还可配置如下值:

  • non_null:为null的参数不序列化。
  • non_empty:为空的参数不序列化,如""、null、没有内容的new HashMap()等都算。Integer的0不算空。
  • non_default:为默认值的参数不序列化,以上都算。另外,如Integer的0等也算默认值。

不序列化的参数:指java对象转换为json字符串时,其中不包含该参数。如当id=1,name=null时,always默认序列化为


如配置了不序列化为null的值,结果如下


常用注解

@JsonProperty:如下,假如id=1,转换为json时将输出key=1
	@JsonProperty("key")
	Integer id;

@JsonIgnore:如下,不序列化id参数

	@JsonIgnore
	Integer id;

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值