Please see。 The version:Spring Boot 2.0.5.RELEASE

request url: http://localhost:8081/api/dateList response result:[1626020430.170000000]

why not yyyy-MM-dd HH:mm:ss format?


@RestController
@RequestMapping("/api")
public class ApiController {
    @RequestMapping(value = "/dateList")
    public List<Object> dateList(){
        List<Object> objects = new ArrayList<>();
        objects.add(Instant.now());
        return objects;
    }
}


@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer{
    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
       JacksonInstantSerializer jacksonInstantSerializer = new JacksonInstantSerializer();
       JacksonInstantDeserializer jacksonInstantDeserializer = new JacksonInstantDeserializer();
       Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder()
                .serializerByType(Instant.class, jacksonInstantSerializer)                
                .deserializerByType(Instant.class,jacksonInstantDeserializer)
                .serializationInclusion(JsonInclude.Include.NON_NULL);
        converters.add(new MappingJackson2HttpMessageConverter(builder.build()));

/*
        for (HttpMessageConverter converter : converters) {
            if (converter instanceof MappingJackson2HttpMessageConverter) {
                MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter =
                        (MappingJackson2HttpMessageConverter) converter;
                ObjectMapper returnObjectMapper =  mappingJackson2HttpMessageConverter.getObjectMapper();
//                ObjectMapper returnObjectMapper = objectMapper;
                mappingJackson2HttpMessageConverter.setObjectMapper(returnObjectMapper);

                JacksonInstantSerializer jacksonInstantSerializer = new JacksonInstantSerializer();
                JacksonInstantDeserializer jacksonInstantDeserializer = new JacksonInstantDeserializer();


                JavaTimeModule javaTimeModule = new JavaTimeModule();
                javaTimeModule.addSerializer(Instant.class, jacksonInstantSerializer);
                javaTimeModule.addDeserializer(Instant.class, jacksonInstantDeserializer);

                returnObjectMapper
                        .setSerializationInclusion(JsonInclude.Include.NON_NULL)
                        .registerModule(javaTimeModule);
            }
        }
   */

    }


}
class JacksonInstantSerializer extends JsonSerializer<Instant> {
        @Override
        public void serialize(Instant instant, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
            ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of(ZoneId.SHORT_IDS.get("CST")));
            LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
            String str = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(localDateTime);
            jsonGenerator.writeString(str);
        }
}
class JacksonInstantDeserializer extends JsonDeserializer<Instant> {
        @Override
        public Instant deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
            String text = jsonParser.getText();
            Long aLong = Long.valueOf(text);
            Instant res = Instant.ofEpochMilli(aLong);
            return res;
        }
}

Comment From: snicoll

Duplicate of #27248