JackSon

前后端分离开发中常用到的数据交互方式就是json。本文主要讲解对jackson对json的相关操作。

jackson

基础篇

1、引入依赖:

<!--jackson--> 
<dependency> 
	<groupId>com.fasterxml.jackson.core</groupId> 
	<artifactId>jackson-databind</artifactId> 
</dependency>

2、、创建ObjectMapper常用配置

private static final ObjectMapper objectMapper; 
static {
    
objectMapper = new ObjectMapper(); // 对象的所有字段全部列入,还是其他的选项,可以忽略null等 
objectMapper.setSerializationInclusion(Include.ALWAYS); // 设置Date类型的序列化及反序列化格式
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); // 忽略空Bean转json的错误 
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); // 忽略未知属性,防止json字符串中存在,而java对象中不存在对应属性的情况出现错误 
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 注册一个时间序列化及反序列化的处理模块,用于解决jdk8中localDateTime等的序列化问题 
objectMapper.registerModule(new JavaTimeModule());}

本文中用到的测试类,后续测试均使用本类

public class JsonUser {
    
private String userName; 
private String pwd; private String address;
private List<String> user_phone; 
private JsonPet pet;  //基础篇还用不到,解决对象内嵌套问题
//省略构造器、get()、set()、toString() 
}
public class JsonPet {
   
 private String name;
 private String age; 
    //省略构造器、get()、set()、toString()列 
}

3、对象转json字符串

JsonUser user = new JsonUser("张三", "1246", "北京市海淀区", Collections.singletonList("15838609251")); //对象转json字符串 String s = objectMapper.writeValueAsString(user); System.out.println(s);

输出:

{“userName”:“张三”,“pwd”:“1246”,“address”:“北京市海淀区”,“user_phone”:“15838609251”}

注1:对象转json需要属性拥有get方法。这种方式是通过get方法来获取对象属性的,少几个get方法,输出的字符串就少几个属性。

注2:注:对象中的Map、List属性,转换的时候,会默认转换(不需要额外的配置)。

4、json字符串转对象

String str = "{\"userName\":\"张三\",\"pwd\":\"1246\",\"address\":\"北京市海淀区\",\"user_phone\":[\"15838609251\"]}"; JsonUser jsonUser = objectMapper.readValue(str, JsonUser.class);

基础篇到这里就结束了。想来,我们的小伙伴肯定有很多疑问,使用中肯定会遇到各种问题,下面的高级篇将进行详细讲解。

高级篇

问题1: 假设反序列化的json里面有个字段,在POJO类中没有,会反序列失败。

基础篇中的测试实体类JsonUser里面有一个字段pet,这也是一个实体类。

如果直接执行如下代码:

String str = "{\"userName\":\"张三\",\"pwd\":\"1246\",\"address\":\"北京市海淀区\",\"user_phone\":[\"15838609251\"],\
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值