簡體   English   中英

Jackson objectMapper,試圖將 LocalDate 序列化為“yyyy-MM-dd”,將 LocalTime 序列化為“HH:mm:ss”

[英]Jackson objectMapper, trying to serialize LocalDate into "yyyy-MM-dd" and LocalTime into "HH:mm:ss"

所以我有一個這樣的 object

    @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;
}

我正在嘗試將 map 轉換為一個字符串,然后我得到一個這樣的字符串

"{
"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}}"

我怎樣才能將它們 map 轉換為日期格式為“yyyy-mm-dd”、時間格式為“HH:mm:ss”的字符串

我如何映射 object

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

我的pom

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

您需要將JavaTimeModule注冊到您的ObjectMapper 這將為 java.time package 的類安裝一堆java.time序列化器/解串器。
(順便說一句:在您的第 2 行中,使用第 1 行中的ObjectMapper ,而不是創建一個新的。)

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

那么 JSON output 會是這樣的:

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

如果您不想為您的項目添加額外的依賴項,您可以自己創建一個序列化程序。 注釋您的成員:

@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate date;

並創建序列化程序:

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class LocalDateSerializer extends StdSerializer<LocalDate> {

    private static final long serialVersionUID = -4746126944463708083L;

    public LocalDateSerializer() {
        super(LocalDate.class);
    }

    @Override
    public void serialize(LocalDate value, JsonGenerator generator, SerializerProvider sp) throws IOException {
        if (value != null) {
            generator.writeString(value.format(DateTimeFormatter.ISO_LOCAL_DATE));
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM