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