Jackson序列化相关

问题:

1、响应页面时间戳为秒

2、序列化类的字段为null 不响应到页面

3、项目所有类中只要出现为null的指定都不返还到页面

4、指定字段名称效应转换

解决:

1、自定义转换类继承JsonSeralizer<T>,泛型中编写需要转换字段的类型,示例代码

 

/**
 * @author vander
 * @Description: 指定字段时间格式转换
 * @Date: Create in 2017/10/25 22:11
 */
public class DateToLongSerializer extends JsonSerializer<Date> {

    @Override
    public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
        //转换为秒
        jsonGenerator.writeNumber(date.getTime()/1000);
    }
}

再在指定字段上使用@JsonSerialize注解指明,使用该转换器

 

 

/** 更新时间. */
@JsonSerialize(using = DateToLongSerializer.class)
private Date updateTime;

 

 

 

 

2、在指定类上添加注解@JsonInclude  ## 版本2.0后

 

 
@JsonInclude(JsonInclude.Include.NON_NULL) public class OrderDTO { 
    ...

}

 

3、在spring配置文件中添加属性

以springboot构建的项目为例,添加如下属性

spring.jackson.default-propertty-inclusion=non_null

 

4、使用@JsonProperty注解

如下示例代码,页面Ajax请求,后端效应该对象该字段的名称将为orderDetailList

 

@JsonProperty("orderDetailList")
private List<OrderDetail> orderDetails;

 

 

 

### Jackson 序列化与反序列化的使用方法 Jackson 是一种流行的 JSON 处理库,广泛用于 Java 中的对象与 JSON 数据之间的转换。以下是关于 Jackson序列化与反序列化的核心概念及其具体用法。 #### 核心类 `ObjectMapper` `ObjectMapper` 是 Jackson 提供的主要工具之一,它负责处理对象的序列化和反序列化操作。通过调用其方法可以轻松完成这些任务[^3]。 #### 基本用法示例 ##### 1. 对象转为 JSON 字符串 (序列化) ```java import com.fasterxml.jackson.databind.ObjectMapper; public class SerializationExample { public static void main(String[] args) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); Student student = new Student("Alice", 20); String jsonString = objectMapper.writeValueAsString(student); // 将对象序列化为JSON字符串 System.out.println(jsonString); } } class Student { private String name; private int age; public Student() {} public Student(String name, int age) { this.name = name; this.age = age; } // Getters and Setters } ``` 上述代码展示了如何将一个 `Student` 类型的对象转化为 JSON 字符串。 ##### 2. JSON 字符串转为对象 (反序列化) ```java import com.fasterxml.jackson.databind.ObjectMapper; public class DeserializationExample { public static void main(String[] args) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); String jsonString = "{\"name\":\"Bob\",\"age\":25}"; Student student = objectMapper.readValue(jsonString, Student.class); // 将JSON字符串反序列化为对象 System.out.println("Name: " + student.getName()); System.out.println("Age: " + student.getAge()); } } class Student { private String name; private int age; public Student() {} public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } ``` 这段代码演示了如何从 JSON 字符串还原成对应的 Java 对象。 #### 自定义反序列化器 当默认行为无法满足需求时,可以通过自定义反序列化器来控制解析逻辑。例如,在 `Student` 的 `age` 属性上添加注解并指定特定的反序列化器: ```java import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.JsonDeserializer; @JsonDeserialize(using = AgeDeserializer.class) private int age; // 定义自定义反序列化器 static class AgeDeserializer extends JsonDeserializer<Integer> { @Override public Integer deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { String value = p.getText(); // 获取原始值 try { return Integer.parseInt(value); // 转换为整数 } catch (NumberFormatException e) { throw new RuntimeException("Invalid age format: " + value); } } } ``` 这里展示了一个简单的例子,说明如何创建和应用自定义的反序列化器[^2]。 #### 解决常见问题 如果遇到复杂场景下的反序列化失败情况,可能需要深入理解 Jackson 的内部机制。比如 `_findRootDeserializer()` 方法的作用就是查找根节点所需的反序列化器实例[^4]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值