Jackson对象Map器,尝试将本地日期序列化为“yyyy-MM-dd”,将本地时间序列化为“HH:mm:ss”

70gysomp  于 2023-01-09  发布在  其他
关注(0)|答案(2)|浏览(79)

我有一个像这样的物体

@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”(表示时间)的字符串
如何Map对象

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>
tuwxkamq

tuwxkamq1#

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

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

那么JSON输出将如下所示:

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

vpfxa7rd2#

如果您不希望在项目中添加额外的依赖项,可以自己创建序列化器。

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

相关问题