每个具有日期格式的对象都被序列化为long。
我已经读过,我需要创建一个自定义对象映射器
所以我做了:
public class CustomObjectMapper extends ObjectMapper {
public CustomObjectMapper() {
super();
configure(Feature.WRITE_DATES_AS_TIMESTAMPS, false);
setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
}
}
我还将自定义映射器注册为转换器
@Override
protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(converter());
addDefaultHttpMessageConverters(converters);
}
@Bean
MappingJacksonHttpMessageConverter converter() {
MappingJacksonHttpMessageConverter converter = new MappingJacksonHttpMessageConverter();
converter.setObjectMapper(new CustomObjectMapper());
return converter;
}
但是,它仍然不起作用,我收到了很长的约会。
知道我做错了什么吗?
答案 0 :(得分:3)
你需要实现自己的Dateserializer,就像下面这样(从tutorial得到它,所以支持Loiane,而不是我;-)):
package ....util.json;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
@Component
public class JsonDateSerializer extends JsonSerializer<Date>{
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm "); // change according to your needs
@Override
public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)
throws IOException {
String formattedDate = dateFormat.format(date);
gen.writeString(formattedDate);
}
}
然后您可以将以下注释添加到日期对象中,它将保持正常:
@JsonSerialize(using = JsonDateSerializer.class)
public Date getCreated() {
return created;
}
至少它适用于弹簧3.2.4和杰克逊1.9.13。
编辑:考虑使用FastDateFormat
代替SimpleDateFormat
,因为它是线程安全替代方案(如Loianes文章的评论中所述)
答案 1 :(得分:0)
尝试在#add()
中添加0
作为索引
@Configuration
@ComponentScan()
@EnableWebMvc
@PropertySource("classpath:/web.properties")
public class WebConfig extends WebMvcConfigurerAdapter
{
@Override
public void configureMessageConverters(final List<HttpMessageConverter<?>> converters)
{
converters.add(0, jsonConverter());
}
@Bean
public MappingJacksonHttpMessageConverter jsonConverter()
{
final MappingJacksonHttpMessageConverter converter = new MappingJacksonHttpMessageConverter();
converter.setObjectMapper(new CustomObjectMapper());
return converter;
}
}
它对我有用。