복붙노트

[SPRING] Jackson SerializationFeature.WRITE_DATES_AS_TIMESTAMPS가 봄에 타임 스탬프를 끄지 않습니다.

SPRING

Jackson SerializationFeature.WRITE_DATES_AS_TIMESTAMPS가 봄에 타임 스탬프를 끄지 않습니다.

많은 검색을 한 후 java.util.Date 필드를 타임 스탬프로 직렬화하는 것을 중지하는 방법을 추적했습니다.이 때 @ @RestController에서 JSON 응답으로 변환합니다.

그러나 나는 그것을 작동시킬 수 없습니다. 발견 한 모든 게시물은 Jackson objet mapper의 SerializationFeature.WRITE_DATES_AS_TIMESTAMPS 기능을 사용하지 않도록 설정했습니다. 그래서 다음 코드를 작성했습니다.

public class MVCConfig {

    @Autowired
    Jackson2ObjectMapperFactoryBean objectMapper;

    @PostConstruct
    public void postConstruct() {
        this.objectMapper.setFeaturesToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    }
}

내가 이해할 수 있듯이, 설정은 bean이기도하다. 따라서 객체 매퍼의 자동 배선이 추가 속성을 설정해야한다. 나는 브레이크 포인트를 사용했고이 설정으로 모든 것이 잘 어울립니다.

그러나 http 쿼리에 대한 응답으로 java.util.Date 속성을 사용하여 bean을 serialize 할 때 나는 여전히 타임 스탬프를 얻고 있습니다.

왜 이것이 작동하지 않는지 아는 사람이 있습니까? 그것은 저를 난처하게했습니다!

해결법

  1. ==============================

    1.주위를 어지럽히고 난 후 다음 코드가 문제를 해결한다는 것을 알게되었습니다.

    주위를 어지럽히고 난 후 다음 코드가 문제를 해결한다는 것을 알게되었습니다.

    public class MVCConfig extends WebMvcConfigurerAdapter {
        @Override
        public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { 
            for (HttpMessageConverter<?> converter : converters) {
                if (converter instanceof MappingJackson2HttpMessageConverter) {
                    MappingJackson2HttpMessageConverter jsonMessageConverter = (MappingJackson2HttpMessageConverter) converter;
                    ObjectMapper objectMapper = jsonMessageConverter.getObjectMapper();
                    objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
                    break;
                }
            }
        }
    }
    

    잭슨 MVC 메시지 변환기에 액세스하여 구성하는 쉬운 방법이 있는지 확실하지 않습니다. 그러나 이것은 나를 위해 일하고있다.

  2. ==============================

    2.예, @Feyyaz에 동의합니다 : properties / yml 파일에 config를 추가하는 것은 기본 컨텍스트 (de) serializer를 구성하는 방법입니다. 이것이 컨트롤에서 벗어 났을 때 스프링 컨텍스트로 조작 될 때까지 남겨 둡니다.

    예, @Feyyaz에 동의합니다 : properties / yml 파일에 config를 추가하는 것은 기본 컨텍스트 (de) serializer를 구성하는 방법입니다. 이것이 컨트롤에서 벗어 났을 때 스프링 컨텍스트로 조작 될 때까지 남겨 둡니다.

    자세한 내용은 Spring 문서의이 부분을 참조하십시오.

    https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper

    원본 링크 제거의 경우 인용 :

    (StackOverFlow markdown은 테이블 구문을 지원하지 않으므로 포맷이 잘못되어 있습니다.이 부분을 Sublime Text에 복사하여 붙여 넣기하고 .md로 저장하거나 원래 링크를 확인하십시오.)

    예 :

    spring:
      jackson:
        default-property-inclusion: non_null # to exclude null in json serialization
        serialization:
          write-dates-as-timestamps: true # write milliseconds since epoch in the final json
    

    또는:

    spring.jackson.default-property-inclusion: non_null # to exclude null in json serialization
    spring.jackson.serialization.write-dates-as-timestamps: true # write milliseconds since epoch in the final json
    
  3. ==============================

    3.네, 후크하고 변환기를 사용하는 개체 매퍼를 변경하면 뭔가를해야합니다

    네, 후크하고 변환기를 사용하는 개체 매퍼를 변경하면 뭔가를해야합니다

    public class CustomObjectMapper extends ObjectMapper {
        public CustomObjectMapper() {
            this.configure(com.fasterxml.jackson.databind.SerializationFeature.
                    WRITE_DATES_AS_TIMESTAMPS, false);
        }
    }
    

    MVCConfig 내부 및 내부

    @Bean
    public ObjectMapper jacksonObjectMapper() {
        return new CustomObjectMapper();
    }
    
    @Bean
    public SerializationConfig serializationConfig() {
        return jacksonObjectMapper().getSerializationConfig();
    }
    
  4. ==============================

    4.

    ObjectMapper objectMapper = new ObjectMapper()
                    .registerModule(new JavaTimeModule())
                    .configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true)
                    .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    
  5. from https://stackoverflow.com/questions/27978762/jackson-serializationfeature-write-dates-as-timestamps-not-turning-off-timestamp by cc-by-sa and MIT license