Java Spring引导:使用ISO格式的本地时间序列化

Java Spring引导:使用ISO格式的本地时间序列化,java,spring-boot,jackson,Java,Spring Boot,Jackson,在一个非常简单的springboot反应式项目中,没有特定的配置(下面尝试的配置除外),我需要以ISO形式序列化LocalTime(以及类似LocalDate的相关类)。默认情况下,每个属性都单独序列化,这从对象的角度来看是有意义的。但我需要ISO格式的单字符串属性 有几次提到了这个问题,比如说,或者说程度较轻 没用。我想知道我做错了什么,或者这些链接是否已经过时,spring中的机制是否已经更新/更改 我做的中心测试是让bean注册适当的模块: import com.fasterxml.jac

在一个非常简单的springboot反应式项目中,没有特定的配置(下面尝试的配置除外),我需要以ISO形式序列化
LocalTime
(以及类似
LocalDate
的相关类)。默认情况下,每个属性都单独序列化,这从对象的角度来看是有意义的。但我需要ISO格式的单字符串属性

有几次提到了这个问题,比如说,或者说程度较轻

没用。我想知道我做错了什么,或者这些链接是否已经过时,spring中的机制是否已经更新/更改

我做的中心测试是让
bean
注册适当的模块:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

@Configuration
public class MyConfiguration {

    @Bean
    @Primary
    public ObjectMapper customJson() {
        ObjectMapper mapper = new Jackson2ObjectMapperBuilder()
                .build();

        mapper.registerModule(new JavaTimeModule());
        return mapper;
    }
}
我识别序列化不是ISO格式的方法是查看我的对象的招摇过市ui描述,显示我的
endTime
属性,如下所示(当我试图实现的实际结果是
“endTime”:“某个ISO字符串”
):


所以问题是:如何在Spring Boot(被动)中为
LocalDate
配置单字符串格式?

您可以通过禁用jackson中的“写入日期作为时间戳”功能来实现您的目标

ObjectMapper mapper = Jackson2ObjectMapperBuilder.json()
                .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) 
                .modules(new JavaTimeModule())
                .build();

这将使其以ISO格式序列化

您需要执行以下操作:

public static void main(String[] args) throws JsonProcessingException {
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.registerModule(new JavaTimeModule());
    System.out.println(objectMapper.writeValueAsString(new Entity()));
}

static class Entity {
    LocalTime time = LocalTime.now();

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm:ss.SSS")
    public ZonedDateTime getTime() {
        return time;
    }
}

这是一个修改后的引文,来自此

怎么办?@dan1st我尝试了这一引文,但由于
jackson-datatype-jsr310
是一个不推荐使用的模块,所以我放弃了它。我的问题是,我在
JavaTimeModule
方面运气不佳。
public static void main(String[] args) throws JsonProcessingException {
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.registerModule(new JavaTimeModule());
    System.out.println(objectMapper.writeValueAsString(new Entity()));
}

static class Entity {
    LocalTime time = LocalTime.now();

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm:ss.SSS")
    public ZonedDateTime getTime() {
        return time;
    }
}