ToB企服应用市场:ToB评测及商务社交产业平台

标题: jackson序列化(jackson codec) [打印本页]

作者: 数据人与超自然意识    时间: 2024-7-23 20:49
标题: jackson序列化(jackson codec)
Jackson 是一个用于 Java 平台的开源 JSON 库,它提供了机动且高效的方式来处理 JSON 数据的序列化(Java对象 → JSON字符串)和反序列化(JSON 字符串→ Java对象)。
以下是 Jackson 的一些主要特点和功能:
 
Spring MVC 默认使用 Jackson 库举行 JSON 的序列化和反序列化,无需额外的设置。

当你返回一个对象时,Spring MVC 将自动使用 Jackson 库将该对象序列化为 JSON 字符串,并将其作为响应的主体返回给客户端。
同样地,当你使用 @RequestBody 注解标记的方法参数时,Spring MVC 将使用 Jackson 库将请求体中的 JSON 数据反序列化为对应的 Java 对象。
 
SpringBoot项目自动依赖了 Jackson 库。 非SpringBoot项目,使用 Jackson 库,可能需要在项目中添加 Jackson 库依赖。
  1. <dependency>
  2.     <groupId>com.fasterxml.jackson.core</groupId>
  3.     <artifactId>jackson-databind</artifactId>
  4.     <version>2.12.5</version>
  5. </dependency>
复制代码
View Code 
 
 
下面是一个使用 Jackson 库举行对象序列化和反序列化的示例
  1. package jstudy.jackson;
  2. import com.fasterxml.jackson.core.JsonProcessingException;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. import lombok.Data;
  5. /**
  6. * 使用 Jackson 库进行对象序列化和反序列化的示例类
  7. */
  8. public class JacksonSerializationDemo {
  9.     public static void main(String[] args) {
  10.         // 创建一个 ObjectMapper 对象
  11.         ObjectMapper objectMapper = new ObjectMapper();
  12.         // 创建一个示例对象
  13.         Person person = new Person("John Doe", 30);
  14.         try {
  15.             // 对象序列化为 JSON 字符串
  16.             String json = objectMapper.writeValueAsString(person);
  17.             System.out.println("Serialized JSON: " + json);
  18.             // JSON 字符串反序列化为对象
  19.             Person deserializedPerson = objectMapper.readValue(json, Person.class);
  20.             System.out.println("Deserialized Person: " + deserializedPerson);
  21.         } catch (JsonProcessingException e) {
  22.             e.printStackTrace();
  23.         }
  24.     }
  25.     @Data
  26.     static class Person {
  27.         private String name;
  28.         private Integer age;
  29.         private String address;
  30.         // 必须提供默认构造函数,以便 Jackson 库能够实例化对象
  31.         public Person() {
  32.         }
  33.         public Person(String name, int age) {
  34.             this.name = name;
  35.             this.age = age;
  36.         }
  37.     }
  38. }
复制代码
 
代码运行效果:
Serialized JSON: {"name":"John Doe","age":30,"address":null}
Deserialized Person: JacksonSerializationDemo.Person(name=John Doe, age=30, address=null)
BTW,上面示例类  JacksonSerializationDemo 可以rename为 JacksonCodecDemo

"Codec" 一词通常用于指代编码器-解码器(Encoder-Decoder)或编码-解码(Encode-Decode)的概念。将示例重命名为 "JacksonCodecDemo" 可以更准确地表达其涵盖了序列化和反序列化的功能。
通过将示例命名为 "JacksonCodecDemo",强调了 Jackson 库不仅实现了对象到 JSON 的序列化(即编码)功能,还具备将 JSON 转换回对象的反序列化(即解码)功能。
这种重命名方式能够更清晰地传达代码示例的目标。
日常开发中,我们也要关注命名。良好的命名规范是高质量代码的基石之一。在 Java 中,命名规范不仅资助保持代码的整齐性和同等性,还能极大地提高代码的可读性和可维护性。
 
如何控制 Jackson 在序列化对象时不包含满是 null 的字段?

要在 Jackson 中避免序列化满是 null 的字段,你可以使用 Jackson 的设置选项来控制序列化行为。
以下是两种常用的方法:
1. 使用 ObjectMapper 的 setSerializationInclusion 方法设置序列化包含规则为 JsonInclude.Include.NON_NULL。这意味着只有非空字段才会被序列化,而满是 null 的字段将被忽略。
  1. import com.fasterxml.jackson.annotation.JsonInclude;
  2. import com.fasterxml.jackson.core.JsonProcessingException;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. public class JacksonSerializationDemo {
  5.     public static void main(String[] args) {
  6.         ObjectMapper objectMapper = new ObjectMapper();
  7.         objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
  8.         // ... 省略其他代码 ...
  9.     }
  10. }
复制代码
 
2. 使用 @JsonInclude 注解在类级别设置序列化包含规则为 JsonInclude.Include.NON_NULL。这将仅对被注解的类有效。
  1. import com.fasterxml.jackson.annotation.JsonInclude;
  2. @JsonInclude(JsonInclude.Include.NON_NULL)
  3. public class Person {
  4.     // ... 省略其他代码 ...
  5. }
复制代码
 
 BTW,我司系统是前后端分离模式,为提高开发效率,我们约定给前端页面所提供的后端接口,只返回明确需要的字段。例如:企业客户信息,后端有一个 EnterpriseVO,包含了企业的基本信息和资质信息。不过,查询企业客户基本信息API、查询企业客户资质信息API,不能返回 EnterpriseVO 的所有字段。此时,要满意这个就可以用上面的 Jackson不序列化null字段的方式来解决。   
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4