在访问了所有关于它的页面后,我发现并尝试了许多想法,没有一个对我有用,所以我写了这篇文章。我在java 8 spring boot 2.2.0中的API有从xsd文件生成的bean。我最近将日期类型改为LocalDateTime(因为弃用所以是时候改了).问题是,以前,日期以时间戳格式显示(作为long),现在LocalDateTime以数组显示,我不需要它。
我试图解决的问题是:
- 我在配置类上有一个WebMvc注解,删除了它,没有解决这个问题。
- 我添加了WRITE_DATES_AS_TIMESTAMPS:false在我的应用程序.yml中(在此属性上尝试了多种格式)
- 我有一个消息转换器的配置类,我试图在其中手动强制使用时间戳。
- 我想在我的bean中添加一个Json注解,但是由于它是从xsd生成的,我不知道这是否可行。
下面是消息转换器的配置类的代码片段:
@Configuration
public class MVCConfigure implements WebMvcConfigurer {
@Autowired
private ObjectMapper jacksonObjectMapper;
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.removeIf(c -> c instanceof MappingJackson2HttpMessageConverter);
jacksonObjectMapper.enable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
converters.add(httpMessageConverterV1V2);
这些解决方案都不起作用,我仍然得到一个LocalDateTime数组(我想要一个long)。
下面是我获取LocalDateTime的方法:
private LocalDateTime getFirstLocalDateTime(final SolrDocument doc, final String key) {
LocalDateTime ldt = null;
Date solrDate = (Date) doc.getFirstValue(key);
if(solrDate != null){
ldt = solrDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
}
return ldt;
}
ps:我使用Date从SolrDoc获取Date的原因是因为我不能直接强制转换为LocalDateTime
实际值:“最后索引日期”:[ 2022年第1期第4期第2期第2期第2期第655000000 ]
期望值:“最后索引日期”:1641261722655
那么,有可能得到我想要的东西吗?
2条答案
按热度按时间yzuktlbb1#
感谢@deHaar,他给了我一些提示,我找到了继续前进的方法。
我创建了一个自定义序列化程序:
我将extendMessageConverters更改为在objectMapper中使用此自定义序列化程序:
xjreopfe2#
我宁愿设置此配置,这样您就不必创建自定义序列化程序:
或在Map器中设置它: