更新现有的Gradle Libs依赖项,以在Spring Project中使用Jackson 2.8.5和DynamoDB封送ZonedDateTime

时间:2017-04-13 22:49:16

标签: java spring gradle build.gradle gradlew

我的任务是将我们现有的所有存储库从Joda Time转换为Java 8,并且在途中我遇到了很多障碍。第一个涉及DynamoDB本身并不支持Java 8,所以我在网上提供了一些帮助,为ZonedDateTime制作了一个自定义转换器。结果在这里:

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编组到弹簧/杰克逊依赖注入的字符串(我相信。对所有这些东西来说还是很新的。)

现在根据Stackoverflow的说法,我需要jackson-datatype-jsr310 here。但是在那个页面上它表示我需要能够编组ZonedDateTime Jackson 2.8.5

现在在libs.gradle我可以看到我们正在使用Jackson 2.5.0 jackson: 'com.fasterxml.jackson.core:jackson-databind:2.5.0',这样才有意义才需要更新它吗?

所以我更新libs.gradle现在说jackson: 'com.fasterxml.jackson.core:jackson-databind:2.8.5',我已将libs.jackson添加到build.gradle文件的编译部分: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?)

我也尝试将jackson core和jackson databind添加到ext.libs定义中:

    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

仍然没有骰子。有什么想法正在发生什么?

1 个答案:

答案 0 :(得分: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-jsr310预先构建在jackson-corejackson-databind中,但显然不是。