【问题标题】:How deserialize the same JSON object but with diferent values into a java class如何将具有不同值的相同 JSON 对象反序列化为 java 类
【发布时间】:2019-12-29 06:40:33
【问题描述】:

我有以下情况:

有时我会得到这个 JSON 对象

{"id": 1, "cp": "male", "money": 10.0, "startDate": "07:00", "endDate": "10:00"}

还有这个

{"id":1, "cp": "male", "money": 10.0, "startDate": 21600, "endDate": 32400}

您可以看到 JSON 具有相同的字段,但有时 startDateendDate 的格式不同 在第二种情况下以秒为单位。

你有简单的java类

public class Person {

    private Integer id;

    private String cp;

    private Double money;

    @JsonDeserialize(converter = StringToLocalTimeConverter.class)
    private LocalTime startDate;

    @JsonDeserialize(converter = StringToLocalTimeConverter.class)
    private LocalTime startDate;

    //Getter-Setter

转换器

public class StringToLocalTimeConverter extends StdConverter<String, LocalTime> {

    static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ISO_LOCAL_TIME;

    @Override
    public LocalTime convert(String value) {


        Long number = Long.parseLong(value);

        return LocalTime.MIN.plusSeconds(number);

    }

}

显然我遇到了解析异常,因为由于格式的原因,我无法将两个数据值映射到同一个 LocalTime。

是否可以将两个 JSON 对象 映射到同一个类?我该如何解决这个问题或者我必须创建单独的类 可以应用什么解决方案。

【问题讨论】:

    标签: json spring-boot jackson deserialization


    【解决方案1】:

    好吧,您可以先尝试使用DateTimeFormatter.ISO_LOCAL_TIME 解析它。如果失败,则将其解析为 long :

    public class StringToLocalTimeConverter extends StdConverter<String, LocalTime> {
    
        static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ISO_LOCAL_TIME;
    
        @Override
        public LocalTime convert(String value) {
            try {
                return LocalTime.parse(value, DATE_FORMATTER);
            } catch (DateTimeParseException e) {}
    
            Long number = Long.parseLong(value);
            return LocalTime.MIN.plusSeconds(number);
        }
    
    }
    

    【讨论】:

    • 我会试试这个
    • 工作正常,我有类似的方法,但错过了 try {}catch()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多