jackson Java -使用多种日期格式初始化JSON响应

2nc8po8w  于 6个月前  发布在  Java
关注(0)|答案(1)|浏览(71)

我正在使用java 17和spring Boot 3,并试图将以下json响应转换为字符串。

{
    "updated": "Sep 13, 2023 19:24:00 UTC",
    "updatedISO": "2023-09-13T19:24:00+00:00",
    "updateduk": "Sep 13, 2023 at 20:24 BST"
}

字符串
我创建了下面的java对象

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Response {

    private LocalDateTime updated;

    private LocalDateTime updatedISO;

    @JsonProperty("updateduk")
    private LocalDateTime updatedUK;

}


json响应中的日期都是不同的格式,如果可能的话,我想将它们全部转换为本地日期时间。
我已经尝试了下面的注解与各种不同的模式,但我还没有能够使其工作

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'")
@JsonDeserialize(using = LocalDateTimeDeserializer.class)


如果你能帮忙的话,我将不胜感激。

mzaanser

mzaanser1#

尝试实现自己的日期转换器。“updatedISO”示例:

public class IsoDateTimeDeserializer extends StdDeserializer<LocalDateTime> {

    public IsoDateTimeDeserializer() {
        super(LocalDateTime.class);
    }

    @Override
    public LocalDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
        String value = jsonParser.readValueAs(String.class);
        return LocalDateTime.parse(value, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
    }
}

字符串
对于其他领域:

public class PatternDateTimeDeserializer extends StdDeserializer<LocalDateTime> {

    public PatternDateTimeDeserializer() {
        super(LocalDateTime.class);
    }

    @Override
    public LocalDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
        String value = jsonParser.readValueAs(String.class);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd, uuuu HH:mm:ss z", Locale.ROOT);
        return LocalDateTime.parse(value, formatter);
    }
}


这样你就可以像这样配置你的类:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Response {

    @JsonDeserialize(using = PatternDateTimeDeserializer.class)
    private LocalDateTime updated;

    @JsonDeserialize(using = IsoDateTimeDeserializer.class)
    private LocalDateTime updatedISO;

    @JsonProperty("updateduk")
    @JsonDeserialize(using = PatternDateTimeDeserializer.class)
    private LocalDateTime updatedUK;

}


对于updateduk字段,您需要格式模式MMM dd, uuuu 'at' HH:mm z

相关问题