通过 Jackson 将 LocalDateTime 字段转换为 JSON 字符串会导致逗号分隔的日期字段?

萨米尔

我有一个具有以下结构的 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将Java对象转换为简单的json字符串而不将LocalDateTime字段转换为扩展的json对象?

将LocalDateTime转换为日期

Jackson JSON将整数转换为字符串

将字符串转换为LocalDateTime

通过节点名称字段中的键将Jackon JSON转换为对象

将JSON字段转换为ReasonML变体

将 json 对象转换为数组字段

在没有方括号和字段名称的情况下使用 Jackson 将 Tree 转换为 Json

将逗号分隔的字符串转换为 JSON

使用LocalDateTime字段将JSON反序列化为对象

使用 jackson 将 csv 转换为 json

如何使用Jackson JSON将JSON字符串转换为Map <String,Set <String >>

如何使用Jackson JSON将JSON字符串转换为Map <String,String>

使用Jackson将JSON字符串转换为Pretty Print JSON输出

为什么Jackson Jackson ObjectMapper给我这个将JSON字段转换为Date对象的错误?无法从字符串反序列化类型为java.util.Date的值

通过附加串联将字符串数组转换为逗号分隔的字符串

将字符串转换为LocalDateTime或OffsetDateTime

将字符串转换为LocalDateTime Java 8

无法将字符串转换为 LocalDateTime 对象

如何将字符串转换为LocalDateTime?

将字符串转换为 LocalDateTime 的问题

如何将逗号分隔的字符串字段转换为 MongoDB 中的对象数组?

如何将逗号分隔的字符串字段转换为 MongoDB 中的数组?

通过 Rails 迁移将文本字段中的符号转换为字符串

如何通过MongoDb Shell将字符串字段转换为对象数组中的ObjectId?

将Uri的URL字段替换为Jackson

使用 Jackson 将 json 字符串转换为通用 Map

用Jackson将json字符串转换为List <List <String>

使用Jackson将JSON字符串转换为Java映射时出错