LocalDateTime 不显示为时间戳(即很长)java 8 spring boot 2.2.0

LocalDateTime not displaying as timestamps (ie as a long) java 8 spring boot 2.2.0

在访问了所有关于它的页面后,我发现并尝试了许多想法,none 对我有用,所以我写了这个 post。 java 8 spring boot 2.2.0 中的 API 具有从 xsd 文件生成的 bean。我最近将 Date 类型更改为 LocalDateTime(因为弃用所以是时候更改了)。 问题是,以前 Date 以时间戳格式显示(很长),现在 LocalDateTime 显示在数组中,我不想要它。

我试图解决的问题:

这是消息转换器的配置 class 片段:

@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 的数组(我想要一个长数组)。

这是我获取 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 获取日期的原因是因为我不能直接转换为 LocalDateTime

实际价值: “lastIndexedDate”:[ 2022年, 1、 4、 2、 2、 2、 655000000 ]

期望值: “lastIndexedDate”:1641261722655

那么,有可能得到我想要的吗?

感谢@deHaar 给了我一些提示,我找到了如何继续。

我创建了一个自定义序列化程序:

public class LocalDateTimeSerialize extends StdSerializer<LocalDateTime> {

    public LocalDateTimeSerialize(Class<LocalDateTime> t) {
        super(t);
    }

    @Override
    public void serialize(LocalDateTime localDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        Long l = localDateTime.toInstant(OffsetDateTime.now().getOffset())
                .toEpochMilli();
        jsonGenerator.writeString(l.toString());
    }
}

我更改了我的 extendMessageConverters 以在我的 objectMapper 中使用这个自定义序列化程序:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule()
                .addSerializer(LocalDateTime.class, new LocalDateTimeSerialize(LocalDateTime.class)));