我有一个具有以下结构的 JSON 对象:
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Record {
private String tid;
private String eid;
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
private LocalDateTime ts;
public Record() {
}
}
当我尝试使用以下方法将其转换为字符串时,
public static String convertToJSON(Object object) {
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json;
try {
json = ow.writeValueAsString(object);
LOGGER.info("(convertToJSON) JSON: {}", json);
} catch (Exception e) {
throw new JSONException("Error Converting JSON To string", e);
}
return json;
}
我得到一个逗号分隔值,如下所示: "ts" : [ 2021, 4, 4, 20, 17, 50, 522000000 ]
我希望将其打印为 ISO-UTC "ts" : "2021-04-04 20:46:44:932" 或 "ts" : "2021-04-04 20:46:44:932z"。
一种是将@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss:SSS") 添加到记录对象,但我不希望不更改 Json 对象定义,因为这会对生产中的飞行数据产生影响。有没有办法改变我的 convertToJSON 方法来实现这一点。
有很多关于这个的 Stackoverfow 帖子。这很简单,请尝试:
public class MyTest {
@Data
public static class Foo {
private LocalDateTime date;
}
public static void main(String[] args) throws JsonProcessingException {
Foo foo = new Foo();
foo.setDate(LocalDateTime.now());
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
System.out.println(objectMapper.writeValueAsString(foo));
}
}
结果将是:{"date":"2021-04-05T11:19:38.999185"}。请注意,我使用了来自 Lombok 的 @Data 来简化。对于 JavaTimeModule,您可能需要添加 Maven 依赖项:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.12.2</version>
</dependency>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句