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