春季:在不修改域类的情况下,在REST响应中格式化日期



我有一个弹簧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;
    }
}

最新更新