我一直在阅读关于Spring启动的教程,在那里我学会了如何阻止jackson将日期转换为时间戳。例如:
{"birthDate":1505736233603} //before
{"birthDate":"2017-09-18T12:04:27.345+0000"}//after
写作
spring.jackson.serialization.write-dates-as-timestamps=false
application.properties。
我如何为SpringMVC做同样的事情,当然 SpringMVC
中没有 application.properties答案 0 :(得分:4)
您必须配置Spring Bean,负责创建服务返回的JSON。
首先,您需要定义转换器将用于创建JSON的Jackson Object Mapper Bean:
<bean class="com.fasterxml.jackson.databind.ObjectMapper" id="objectMapper">
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg value="yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"/>
</bean>
</property>
</bean>
(请注意,您可以定义所需的dateFormat)。
然后,您需要将此objectMapper bean注入JSON消息转换器:
<mvc:annotation-driven>
<mvc:message-converters register-defaults="false">
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" ref="objectMapper"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
如您所见,我正在使用“mvc”命名空间(“http://www.springframework.org/schema/mvc”)来定义MVC bean。
如果您使用的是Annotations而不是XML配置,那么您可以通过定义下一个Configuration类(或使其适应您的代码:)来完成相同的操作:))
@EnableWebMvc
@Configuration
@ComponentScan({ "com.yourorg.app" })
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(
List<HttpMessageConverter<?>> converters) {
messageConverters.add(new createJsonHttpMessageConverter());
super.configureMessageConverters(converters);
}
private HttpMessageConverter<Object> createJsonHttpMessageConverter() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"));
MappingJackson2HttpMessageConverter jsonConverter =
new MappingJackson2HttpMessageConverter();
jsonConverter.setObjectMapper(objectMapper);
return jsonConverter;
}
}
希望这会有所帮助:)
答案 1 :(得分:0)
如果您有权访问ObjectMapper,您也可以通过编程方式将其设置为属性
ObjectMapper mapper = new ObjectMapper();
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
mapper.setDateFormat(new ISO8601DateFormat());
答案 2 :(得分:0)
另一种方法是在由框架填充/配置 MessageConverter
后对其进行配置:
@EnableWebMvc
@Configuration
public class AppConfiguration implements WebMvcConfigurer {
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
for (HttpMessageConverter<?> converter : converters) {
if (converter instanceof AbstractJackson2HttpMessageConverter) {
AbstractJackson2HttpMessageConverter jacksonconverter = (AbstractJackson2HttpMessageConverter) converter;
jacksonconverter.getObjectMapper()
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
}
}
}
}
此外,此代码也应适用于 SMILE
,因为 MappingJackson2SmileHttpMessageConverter
扩展了 AbstractJackson2HttpMessageConverter
。