我有一个弹簧5(不是弹簧启动)项目,该项目的端点返回依赖关系jar中定义的对象(我无法修改它)。该对象的字段是日期(LocalDateTime)。
响应中的日期格式为:
{
"dayOfMonth": 21,
"dayOfWeek": "THURSDAY",
"month": "FEBRUARY",
"year": 2019,
"dayOfYear": 52,
"hour": 11,
"minute": 24,
"nano": 753000000,
"second": 32,
"monthValue": 2,
"chronology": {
"id": "ISO",
"calendarType": "iso8601"
}
}
我该如何写入为ISO 8601或类似?我尝试添加以下依赖项:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>2.9.8</version>
</dependency>
我还试图为objectMapper创建主bean:
@Bean
@Primary
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
objectMapper.registerModule(new Jdk8Module());
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
return objectMapper;
}
明确使用时映射器正常工作,但是当春季返回JSON REST响应时效果不佳。
为了简化而不是编写整个代码,我希望以下端点(例如一个端点)正确地将日期格式化。
@GetMapping(path = "/date", produces = "application/json")
public @ResponseBody ResponseEntity<LocalDateTime> date(@RequestHeader HttpHeaders headers) {
return new ResponseEntity<>(LocalDateTime.now(), HttpStatus.OK);
}
谢谢。
我通过添加一个基于此博客条目将我的objectMapper链接到httpmessageconverter的配置类来修复它。
@Configuration
public class JacksonConfiguration {
@Autowired
ObjectMapper mapper;
private RequestMappingHandlerAdapter annotationMethodHandlerAdapter;
@PostConstruct
public void init() {
List<HttpMessageConverter<?>> messageConverters = annotationMethodHandlerAdapter.getMessageConverters();
for (HttpMessageConverter<?> messageConverter : messageConverters) {
if (messageConverter instanceof MappingJackson2HttpMessageConverter) {
MappingJackson2HttpMessageConverter m = (MappingJackson2HttpMessageConverter) messageConverter;
m.setObjectMapper(mapper);
}
}
}
@Autowired
public void setAnnotationMethodHandlerAdapter(RequestMappingHandlerAdapter annotationMethodHandlerAdapter) {
this.annotationMethodHandlerAdapter = annotationMethodHandlerAdapter;
}
}