我正在使用Spring Boot创建REST API,并且在使用Swagger 2时遇到了序列化LocalDateTime的问题。
没有Swagger,JSON输出是这样的:
{
"id": 1,
...
"creationTimestamp": "2018-08-01T15:39:09.819"
}
使用Swagger就像这样:
{
"id": 1,
...
"creationTimestamp": [
2018,
8,
1,
15,
40,
59,
438000000
]
}
我已将其添加到pom文件中,因此日期可以正确序列化:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
这是Jackson的配置:
@Configuration
public class JacksonConfiguration {
@Bean
@Primary
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
return objectMapper;
}
}
这是Swagger的配置:
@Configuration
@EnableSwagger2
public class SwaggerConfiguration extends WebMvcConfigurationSupport {
@Bean
public Docket messageApi() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.xxx.message.controller"))
.build()
.apiInfo(metaData());
}
private ApiInfo metaData() {
return new ApiInfoBuilder()
.title("Message service")
.version("1.0.0")
.build();
}
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
当我在DTO的字段中添加这样的反序列化器时,它可以工作。但是,它应该工作而不必添加它。
@JsonFormat(pattern = "dd/MM/yyyy")
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
private LocalDateTime creationTimestamp;
我想问题是Swagger有自己的对象映射器,该对象映射器覆盖了另一个。有解决办法的想法吗?
预先感谢
答案 0 :(得分:0)
如我所见,当SwaggerConfiguration
扩展WebMvcConfigurationSupport
时出现问题。如果不需要,可以删除此扩展名。