@JsonDeserialize 和 @JsonSerialize 基本使用 介绍的博客比较多:
https://blog.csdn.net/yage124/article/details/107321339/
https://blog.csdn.net/yage124/article/details/107321339/https://www.h5w3.com/249702.html
https://www.h5w3.com/249702.html上面是两种常见的反序列化。
现在的情况是:
前端传递的是字符串集合,后端接收的是集合中的类:
前端传递参数:
{
"applyTimeSection": ["2020-02-19 08:11:11","2020-02-19 08:20:11"]
}
后端接收:
private List
applyTimeSection;
通过一些基础使用我们知道 使用@JsonDeserialize反反序列化,需要实现自定义反序列化类。
- import com.fasterxml.jackson.core.JsonParser;
- import com.fasterxml.jackson.core.JsonProcessingException;
- import com.fasterxml.jackson.databind.DeserializationContext;
- import com.fasterxml.jackson.databind.JsonDeserializer;
- import org.springframework.util.ObjectUtils;
-
- import java.io.IOException;
- import java.time.Instant;
- import java.time.LocalDateTime;
- import java.time.ZoneOffset;
- import java.time.format.DateTimeFormatter;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.Date;
- import java.util.List;
-
- /**
- * 将List
转换为 List - */
- public class Strings2Dates extends JsonDeserializer
> {
- @Override
- public List
deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { - if (ObjectUtils.isEmpty(p)) {
- return Collections.emptyList();
- }
- // 对于集合类型getText()方法是不行的
- // p.getText()
- // 此处是重点:VO对应的属性是什么类型,此处的参数就什么类型
- List
list = p.readValueAs(List.class); - List
dates = new ArrayList<>(); - DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
- for (String date : list) {
- LocalDateTime parse = LocalDateTime.parse(date, dateTimeFormatter);
- Instant instant = parse.toInstant(ZoneOffset.ofHours(8));
- dates.add(Date.from(instant));
- }
- return dates;
- }
- }
定义了反序列化类,此时我们就可以在VO对应的属性的setter方法上添加注解即可。
- @JsonDeserialize(using = Strings2Dates.class)
- public void setApplyTimeSelection(List
applyTimeSelection) { - this.applyTimeSelection = applyTimeSelection;
- }