San*_*Rey 0 java spring json jackson spring-boot
我想在 Spring Boot v1.5.14.RELEASE 应用程序中实现一个自定义验证器。首先,我创建一个自定义约束注释:
我有这个对象:
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
@SuperBuilder
public class Hotel {
@JsonFormat(pattern = "yyyy-MM-dd")
private OffsetDateTime interactionDurationStart;
@JsonFormat(pattern = "yyyy-MM-dd")
private OffsetDateTime interactionDurationEnd;
}
Run Code Online (Sandbox Code Playgroud)
在yml中:
spring:
jackson:
mapper:
DEFAULT_VIEW_INCLUSION: true
serialization:
WRITE_DATES_AS_TIMESTAMPS: false
Run Code Online (Sandbox Code Playgroud)
在我的配置文件中:
@Primary
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
//objectMapper.registerModule(new JavaTimeModule());
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(OffsetDateTime.class, new JsonSerializer<OffsetDateTime>() {
@Override
public void serialize(OffsetDateTime offsetDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
jsonGenerator.writeString(DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(offsetDateTime));
}
});
objectMapper.registerModule(simpleModule);
return objectMapper;
}
Run Code Online (Sandbox Code Playgroud)
但这是我在 API 响应中看到的
"interactionDurationEnd" : {
"offset" : {
"totalSeconds" : 7200,
"id" : "+02:00",
"rules" : {
"transitionRules" : [ ],
"transitions" : [ ],
"fixedOffset" : true
}
},
Run Code Online (Sandbox Code Playgroud)
Spring MVC使用Jackson作为默认的 json 对象映射器。Jackson默认不支持 java8 的 Time API 的序列化/反序列化,但它提供了一个模块来集成它。只需将此依赖项包含在您的pom.xml:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
Spring Boot自动配置将检测Jackson模块类JavaTimeModule并将其添加到ObjectMapper实例中。
如果您ObjectMapper手动创建实例,则可以使用以下行添加模块:
objectMapper.registerModule(new JavaTimeModule());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1144 次 |
| 最近记录: |