2016-12-11 7 views
2

JodaTime을 JSR310으로 바꾸고 JodaTime() 모듈을 올바르게 작동 시켰습니다.Spring에서 JSR310 java.time을 사용할 때 ISO 8601에 날짜를 순차적으로 표시합니다.

봄 부팅 응용 프로그램에서 날짜의 일련 번호를 다시 구성하려고합니다.

나는 두 그래서 내가 여기에 조언을 따라 ISO 8601

내 날짜/직렬화 역 직렬화하는 방법을 찾고 있어요 그러나 이것은 도움이되지 않습니다 지킬 수없는

: http://lewandowski.io/2016/02/formatting-java-time-with-spring-boot-using-json/

이를

@Configuration 
public class JacksonConfig extends RepositoryRestMvcConfiguration { 

    private static final Logger logger = LoggerFactory.getLogger(JacksonConfig.class); 
    public static final DateTimeFormatter FORMATTER = ofPattern("dd::MM::yyyy"); 

    @Bean 
    // Override and Primary due to bug: https://github.com/spring-projects/spring-boot/issues/6529 
    @Override 
    @Primary 
    public ObjectMapper objectMapper() { 
     ObjectMapper mapper = new ObjectMapper(); 
     mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
     mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true); 
     mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); 
     JavaTimeModule javaTimeModule = new JavaTimeModule(); 
     javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer()); 
     javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer()); 
     mapper.registerModule(javaTimeModule); 
     return mapper; 
    } 

    public class LocalDateSerializer extends JsonSerializer<LocalDate> { 
     @Override 
     public void serialize(LocalDate value, JsonGenerator gen, SerializerProvider serializers) throws IOException { 
      gen.writeString(value.format(FORMATTER)); 
     } 
    } 
    public class LocalDateDeserializer extends JsonDeserializer<LocalDate> { 
     @Override 
     public LocalDate deserialize(JsonParser p, DeserializationContext ctx) throws IOException { 
      return LocalDate.parse(p.getValueAsString(), FORMATTER); 
     } 
    } 
} 

빈 (bean) 통해 인스턴스하지만 serializedeserialize가 호출되지는 결코 얻을 : 내 objectMapperJacksonConfig.java입니다.

사용자 시리얼 라이저/디시리얼라이저없이 JavaTimeModule도 시도했지만 작동하지 않습니다.

전혀 영향을 미치지 않는 것 같습니다.

조금 더 디버깅 할 수있는 방법이 있습니까? 자바 시간 모듈에서 제공되는 SER/deser의

https://github.com/spring-projects/spring-hateoas/issues/333

답변

1

만들기 사용 : 나는 봄 hateoas 및 스프링 데이터를 사용하고

, 나는 관련이있을 수있는이 문제를 가지고있다. 이것은 실제로 사용자 정의 포맷터로 설정합니다.

import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; 
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; 

public ObjectMapper objectMapper() { 
    ObjectMapper mapper = new ObjectMapper(); 
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
    mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true); 
    mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); 
    JavaTimeModule javaTimeModule = new JavaTimeModule(); 
    LocalDateSerializer localDateSerializer = new LocalDateSerializer(FORMATTER); 
    javaTimeModule.addSerializer(LocalDate.class, localDateSerializer); 
    LocalDateDeserializer localDateDeserializer = new LocalDateDeserializer(FORMATTER); 
    javaTimeModule.addDeserializer(LocalDate.class, localDateDeserializer); 
    mapper.registerModule(javaTimeModule); 
    return mapper; 
} 
+0

왜 이것이 효과가없고 어떻게 할 수 있는지 아십니까? 이것을 디버깅합니까? 내가 말했듯이, deserialiser 직렬화 결코 해고 – BigDong

+0

개체 매퍼에 그들을 어떻게 직접 추가 할 수 있습니까? 죄송합니다. – BigDong

+0

자바 시간 모듈을 등록하지 않고 사용해 볼 수 있습니다. 간단한 모듈을 사용하여 ser/deser를 추가하고 mapper.SimpleModule 객체에 모듈을 등록합니다. 새 SimpleModule(); module.addSerializer (LocalDate.class, new LocalDateSerializer()); mapper.registerModule (module); 이 같은. – Veeram