java - 更新现有 Gradle Libs 依赖项,以在 Spring 项目中使用 Jackson 2.8.5 和 DynamoDB 编码 ZonedDateTime

标签 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 的编码(marshal)处理。但我现在的最后一个问题是从 ZonedDateTime 编码到 String 以进行 Spring/Jackson 依赖注入(inject)(我相信。对所有这些东西来说仍然很新)。

现在根据 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:无法构造java.time.ZonedDateTime的实例:找不到合适的构造函数,无法从对象值反序列化(缺少默认构造函数或创建者,或者也许需要在构建时添加/启用类型信息?)

我还尝试将 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

仍然没有骰子。知道发生了什么吗?

最佳答案

我明白了!这是我的

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 中,但显然事实并非如此。

关于java - 更新现有 Gradle Libs 依赖项,以在 Spring 项目中使用 Jackson 2.8.5 和 DynamoDB 编码 ZonedDateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43402867/

相关文章:

java - 正则表达式匹配两个 {} 之间的所有内容

java - 如何更新数据库行

java - Spring Batch如何分块读取?它维护光标吗?

java - Spring-Boot应用程序默认有内存节省模式吗?

java - Gradle 文件未通过 cmd 执行

docker:尝试连接到 Docker 守护进程套接字时权限被拒绝

java - 如何从小程序类获取宽度?

java - Web 应用程序似乎启动了一个名为的线程,但未能停止它。这很可能造成内存泄漏

spring - 泽西+Oauth 2.0

gradle - 如何从 Gradle 中构建的 JAR 中排除依赖项?