【发布时间】:2016-02-23 16:35:52
【问题描述】:
我正在使用 Spring 4.1.6 创建一个 RESTful API。我不使用 Spring Boot。我不想用@JsonSerialize(using = MyLocalDateTimeJsonSerializer.class) 注释我的每个资源,因为它添加了很多样板。相反,这应该是默认行为。
理想情况下,我想添加一些配置来获取我的自定义LocalDateTime 序列化程序,然后在整个过程中使用该序列化程序。我看到了一个示例,让我希望以下内容会起作用,但事实并非如此。
@Configuration
@EnableWebMvc
public class JacksonConfiguration extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder()
.serializers(new LocalDateTimeJsonSerializer());
converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
}
}
public class LocalDateTimeJsonSerializer extends JsonSerializer<LocalDateTime> {
@Override
public void serialize(LocalDateTime localDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
throws IOException, JsonProcessingException {
jsonGenerator.writeString("foo");
}
@Override
public Class<LocalDateTime> handledType() {
return LocalDateTime.class;
}
}
我注意到 Spring 加载了 JSR310Module,它调用了正在使用的 addSerializer(LocalDateTime.class, LocalDateTimeSerializer.INSTANCE)。会不会是在上面的例子之后注册的,所以优先考虑?
有没有办法让我的自定义 LocalDateTime 序列化器在整个代码中使用,而不使用 @JsonSerialize?
编辑
Spring DI 没有选择基于注解的配置的原因是因为我的项目也有基于 xml 的配置,其中声明了 <mvc:annotation-driven/>。
这似乎覆盖了带注释的类。从 xml 中删除它,扩展 WebMvcConfigurerAdapter 的配置类被组件扫描和使用。
【问题讨论】:
标签: java spring spring-mvc jackson