2017-04-13 7 views
1

Joda Time의 모든 기존 저장소를 Java 8 시간으로 변환해야한다는 과제가 있었으며 그 길. 첫 번째는 DynamoDB가 Java 8을 본질적으로 지원하지 않기 때문에 웹에서 도움을 받아 ZonedDateTime 용 사용자 지정 변환기를 만들었습니다. 결과는 다음과 같습니다.Spring 프로젝트에서 Jackson 2.8.5 및 DynamoDB를 사용하여 ZonedDateTime을 마샬링하는 기존 Gradle Libs 종속성 업데이트

static public class ZonedDateTimeConverter implements DynamoDBTypeConverter<String, ZonedDateTime> { 

    @Override 
    public String convert(final ZonedDateTime time) { 
     return time.toString(); 
    } 

    @Override 
    public ZonedDateTime unconvert(final String stringValue) { 
     return ZonedDateTime.parse(stringValue); 
    } 
} 

이렇게하면 ZonedDateTime에서 String으로 마샬링되고 DynamoDB에서 다시 마샬링됩니다. 하지만 지금은 ZonedDateTime에서 Spring/Jackson 종속성 삽입을위한 String으로 마샬링 할 때 마지막 문제가 생깁니다.

이제는 Stackoverflow에 따라 jackson-datatype-jsr310here이 필요합니다. 그러나 해당 페이지에서 내가이 ZonedDateTime 우리가 잭슨 2.5.0 jackson: 'com.fasterxml.jackson.core:jackson-databind:2.5.0',을 사용하고 그래서 그냥 바로 업데이트해야 의미가 있음을 내가 볼 수 libs.gradle에서 지금 Jackson 2.8.5

이다 마샬링 할 수 있도록 필요한 모든 말한다?

그래서 지금 jackson: 'com.fasterxml.jackson.core:jackson-databind:2.8.5',을 말할 libs.gradle 업데이트하고 나는 build.gradle 파일의 컴파일 섹션에 libs.jackson를 추가했습니다 : compile(libs.jackson)

을하지만 구축 할 때 나는 아직도 com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of java.time.ZonedDateTime: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?)을받을 수 있습니다.

jacksonCore: 'com.fasterxml.jackson.core:jackson-core:2.8.5', 
    jacksonBind: 'com.fasterxml.jackson.core:jackson-databind:2.8.5', 

build.gradle :

libs.jacksonCore, 
    libs.jacksonBind 

을 여전히 주사위를

나는 또한 ext.libs 정의에 잭슨 코어와 잭슨 데이터 바인딩을 추가하지 않습니다 시도했습니다. 무슨 일이야?

+0

저지와 잭슨을 사용한다고 가정합니다. 필드의 경우 "@JsonCreate"및 "@JsonProperty"로 생성자에 주석을 추가하거나 getters 및 setter를 사용하여 기본 생성자를 구현합니다. –

+0

@RamandeepNanda 주석이 필요하지 않습니다. Jackson의 업데이트 된 버전은 새로운 ZonedDateTime 및 LocalDateTime과 같은 Java 8 요소를 기본적으로 지원해야합니다. 예를 들어 https://github.com/FasterXML/jackson-datatype-jsr310/blob/master/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerializer.java에 내장되어 있습니다. – anon58192932

+1

라이브러리를 업데이트하면 주석 가져 오기를 com.fasterxml로 업데이트 했습니까? 당신이 gradle을 사용한다면 당신은 나무를보기 위해 gradle app dependencies를 돌릴 수 있습니다. –

답변

1

나는 그것을 알아 냈다! 여기 내

build.gradle :

compile(
    libs.jacksonCore, 
    libs.jacksonBind, 
    libs.jacksonData 
) 

그리고 libs.gradle가 :

jacksonCore: 'com.fasterxml.jackson.core:jackson-core:2.8.8', 
    jacksonBind: 'com.fasterxml.jackson.core:jackson-databind:2.8.8', 
    jacksonData: 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.8.8', 

내가 jackson-datetype-jsr310jackson-core 또는 jackson-databind에 사전 구축했지만, 분명히 그렇지 않은 생각했다.