首页 > 解决方案 > Jackson objectMapper,试图将 LocalDate 序列化为“yyyy-MM-dd”,将 LocalTime 序列化为“HH:mm:ss”

问题描述

所以我有一个像这样的对象

    @EqualsAndHashCode
@Builder
@NoArgsConstructor
@Getter
@Setter
@AllArgsConstructor
public class CreateBookingDto implements Serializable {
    @JsonFormat(pattern="yyyy-MM-dd")
    private LocalDate date;
    @JsonFormat(pattern="HH:mm:ss")
    private LocalTime startTime;
}

我正在尝试将它映射到一个字符串,我得到一个像这样的字符串

"{
"date":
{"year":2021,"month":"JANUARY","dayOfWeek":"SATURDAY","era":"CE","chronology":{"id":"ISO","calendarType":"iso8601"},"dayOfYear":16,"leapYear":false,"monthValue":1,"dayOfMonth":16},
"startTime":
{"hour":16,"minute":33,"second":13,"nano":721065000}}"

如何将它们映射到日期格式为“yyyy-mm-dd”和时间格式为“HH:mm:ss”的字符串

我如何映射对象

def objectMapper = new ObjectMapper()
def requestBodyJson = new ObjectMapper().writeValueAsString(dtoObject)

我的绒球

        <dependency>
        <groupId>com.fasterxml.jackson</groupId>
        <artifactId>jackson-bom</artifactId>
        <version>2.12.1</version>
        <type>pom</type>
    </dependency>

标签: javajackson

解决方案


您需要注册JavaTimeModule到您的ObjectMapper. 这将为包的类安装一堆 JSON 序列化器/反序列化器java.time
(顺便说一句:在你的第 2 行,使用第ObjectMapper1 行,而不是创建一个新的。)

def ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule())
def requestBodyJson = objectMapper.writeValueAsString(dtoObject)

然后 JSON 输出将是这样的:

{"date":"2021-01-17","startTime":"22:59:15"}

推荐阅读