杰克逊注解 JsonFormat$Value json java.lang.NoSuchMethodError

Posted

技术标签:

【中文标题】杰克逊注解 JsonFormat$Value json java.lang.NoSuchMethodError【英文标题】:Jackson annotation JsonFormat$Value json java.lang.NoSuchMethodError 【发布时间】:2016-08-09 22:16:25 【问题描述】:

我在我的 gradle 项目中使用 com.fasterxml.jackson.core:jackson-annotations:2.6.0。自从将com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.6.0 添加到我的项目构建文件中后,我在运行我的 gradle 项目时遇到了这个异常。这是我的错误的堆栈跟踪。

引起:org.springframework.beans.BeanInstantiationException: 实例化失败 [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter]: 构造函数抛出异常;嵌套异常是 java.lang.NoSuchMethodError: com.fasterxml.jackson.annotation.JsonFormat$Value.empty()Lcom/fasterxml/jackson/annotation/JsonFormat$Value; 在 org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163) 在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1098) ... 117 更多原因:java.lang.NoSuchMethodError: com.fasterxml.jackson.annotation.JsonFormat$Value.empty()Lcom/fasterxml/jackson/annotation/JsonFormat$Value; 在 com.fasterxml.jackson.databind.cfg.MapperConfig.(MapperConfig.java:50) 在 com.fasterxml.jackson.databind.ObjectMapper.(ObjectMapper.java:535) 在 com.fasterxml.jackson.databind.ObjectMapper.(ObjectMapper.java:452) 在 org.springframework.http.converter.json.Jackson2ObjectMapperBuilder.build(Jackson2ObjectMapperBuilder.java:553) 在 org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.(MappingJackson2HttpMessageConverter.java:57) 在 org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter.(AllEncompassingFormHttpMessageConverter.java:61) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.(RequestMappingHandlerAdapter.java:187) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native 方法)在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:422) 在 org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147) ... 119 更多嵌套在 org.springframework.beans.factory.BeanCreationException:错误 用名字创建bean 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter': bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter]: 构造函数抛出异常;嵌套异常是 java.lang.NoSuchMethodError: com.fasterxml.jackson.annotation.JsonFormat$Value.empty()Lcom/fasterxml/jackson/annotation/JsonFormat$Value;: java.lang.NoSuchMethodError: com.fasterxml.jackson.annotation.JsonFormat$Value.empty()Lcom/fasterxml/jackson/annotation/JsonFormat$Value; 在 com.fasterxml.jackson.databind.cfg.MapperConfig.(MapperConfig.java:50) 在 com.fasterxml.jackson.databind.ObjectMapper.(ObjectMapper.java:535) 在 com.fasterxml.jackson.databind.ObjectMapper.(ObjectMapper.java:452) 在 org.springframework.http.converter.json.Jackson2ObjectMapperBuilder.build(Jackson2ObjectMapperBuilder.java:553) 在 org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.(MappingJackson2HttpMessageConverter.java:57) 在 org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter.(AllEncompassingFormHttpMessageConverter.java:61) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.(RequestMappingHandlerAdapter.java:187) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native 方法)在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:422) 在 org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147) 在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1098) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1050) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 在 org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:446) 在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:328) 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) 在 org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548) 在 org.mortbay.jetty.servlet.Context.startContext(Context.java:136) 在 org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1272) 在 org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) 在 org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:489) 在 org.gradle.api.plugins.jetty.internal.JettyPluginWebAppContext.doStart(JettyPluginWebAppContext.java:112) 在 org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 在 org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152) 在 org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156) 在 org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 在 org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152) 在 org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 在 org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 在 org.mortbay.jetty.Server.doStart(Server.java:224) 在 org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 在 org.gradle.api.plugins.jetty.internal.Jetty6PluginServer.start(Jetty6PluginServer.java:111) 在 org.gradle.api.plugins.jetty.AbstractJettyRunTask.startJettyInternal(AbstractJettyRunTask.java:238) 在 org.gradle.api.plugins.jetty.AbstractJettyRunTask.startJetty(AbstractJettyRunTask.java:191) 在 org.gradle.api.plugins.jetty.AbstractJettyRunTask.start(AbstractJettyRunTask.java:162) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75) 在 org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:227) 在 org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:220) 在 org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:209) 在 org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:585) 在 org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:568) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46) 在 org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35) 在 org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64) 在 org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) 在 org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52) 在 org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) 在 org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53) 在 org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) 在 org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203) 在 org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185) 在 org.gradle.execution.taskgraph.Abs​​tractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66) 在 org.gradle.execution.taskgraph.Abs​​tractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50) 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25) 在 org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110) 在 org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37) 在 org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37) 在 org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23) 在 org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43) 在 org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32) 在 org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37) 在 org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30) 在 org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:154) 在 org.gradle.internal.Factories$1.create(Factories.java:22) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52) 在 org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:151) 在 org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32) 在 org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99) 在 org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62) 在 org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93) 在 org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82) 在 org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94) 在 org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:46) 在 org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) 在 org.gradle.tooling.internal.provider.runner.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:58) 在 org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) 在 org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43) 在 org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28) 在 org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:75) 在 org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:45) 在 org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:52) 在 org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) 在 org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) 在 org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37) 在 org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) 在 org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26) 在 org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) 在 org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34) 在 org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) 在 org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74) 在 org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72) 在 org.gradle.util.Swapper.swap(Swapper.java:38) 在 org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72) 在 org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) 在 org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47) 在 org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) 在 org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:66) 在 org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) 在 org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) 在 org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72) 在 org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) 在 org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) 在 org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41) 在 org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) 在 org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50) 在 org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246) 在 org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54) 在 org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)

我在课堂上没有使用过@JsonFormat。但是我确实有JsonSerializerJsonDeserializer 注释,它们使用两个类来序列化和反序列化我的ZonedDateTime 与UTC 中的Json。我是第一次做这个序列化和反序列化,所以请提出任何建议。

这是我的 gradle 文件代码:

apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'jetty' apply plugin: 'maven' apply plugin: 'war'

ext   springVersion = "4.2.4.RELEASE"  springSecurityVersion = "4.0.3.RELEASE" 

repositories       mavenLocal()    mavenCentral()
     /* maven 
        url "http://repo.typesafe.com/typesafe/releases/"
     */ 

configurations.all     exclude group: "commons-logging", module: "commons-logging"    exclude group: "log4j", module: "log4j" 

dependencies     compile 'org.slf4j:jcl-over-slf4j:1.7.12'    compile 'ch.qos.logback:logback-classic:1.1.3'    compile "org.springframework:spring-core:$springVersion"    compile "org.springframework:spring-context:$springVersion"
        compile ("org.springframework:spring-web:$springVersion")
       exclude group: "com.fasterxml.jackson.core"        compile ("org.springframework:spring-webmvc:$springVersion")
       exclude group: "com.fasterxml.jackson.core"        compile "org.springframework:spring-orm:$springVersion"    compile "org.springframework.security:spring-security-web:$springSecurityVersion" compile "org.springframework.security:spring-security-config:$springSecurityVersion"
       compile "org.aspectj:aspectjrt:1.7.4"

   compile "org.hibernate:hibernate-core:4.3.6.Final"        compile "org.hibernate:hibernate-entitymanager:4.3.6.Final"    compile "javax.servlet:javax.servlet-api:3.1.0"    compile "org.javassist:javassist:3.15.0-GA"    compile "mysql:mysql-connector-java:5.1.31"
       compile "org.hsqldb:hsqldb:2.3.2"
       compile "commons-dbcp:commons-dbcp:1.2.2"    compile "org.apache.commons:commons-lang3:3.4"      compile 'com.fasterxml.jackson.core:jackson-annotations:2.7.0'    compile 'com.fasterxml.jackson.core:jackson-core:2.7.0'    compile 'com.fasterxml.jackson.core:jackson-databind:2.7.0'    compile 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.7.0'

       compile "net.sf.ehcache:ehcache-core:2.6.9"    compile "org.hibernate:hibernate-ehcache:4.3.5.Final"    compile "com.h2database:h2:1.4.177"    compile "com.google.code.gson:gson:2.6.2" 
       testCompile ("junit:junit:4.12")
        exclude group: "org.hamcrest"        testCompile "org.springframework:spring-test:$springVersion"    testCompile "org.easetech:easytest-core:1.4.0"    testCompile "org.mockito:mockito-core:1.9.5"    testCompile "org.hamcrest:hamcrest-all:1.3"    testCompile "com.jayway.jsonpath:json-path:2.2.0"    testCompile "com.jayway.jsonpath:json-path-assert:2.2.0"
       testRuntime "org.hsqldb:hsqldb:2.3.2"  

【问题讨论】:

如果你使用spring webmvc你不需要再次添加jackson依赖,spring mvc已经有jackson core jars 嗨 priyamal,实际上,如果我在 spring mvc 或 spring webmvc 中使用 jackson 依赖项,那么我可能有机会遇到与我现在面临的相同错误的问题..JsonFormat.Value。未找到 empty() 方法,因为此特定方法是为 2.7 及更高版本定义的。这就是为什么我实际上排除了 spring mvc 和 webmvc 中的 jackson jar 并手动定义它们。 【参考方案1】:

检查您的项目依赖项。您可能正在使用不兼容的库版本。 2.7 版有方法 empty() 而 2.6 版没有。

http://fasterxml.github.io/jackson-annotations/javadoc/2.6/com/fasterxml/jackson/annotation/JsonFormat.Value.html

http://fasterxml.github.io/jackson-annotations/javadoc/2.7.0-rc1/com/fasterxml/jackson/annotation/JsonFormat.Value.html

尝试升级到 2.7 版。

【讨论】:

嗨,Benat 我实际上也尝试过这样做......升级到版本 2.7 但我仍然面临同样的问题。现在我尝试在其他主要的 spring 依赖项中排除 jackson 依赖项,例如 spring-web 和 spring-webmvc 依赖项。即使在那之后我也遇到了同样的问题。 检查您正在构建的 WAR 文件是否包含您希望拥有的库。 是的,我的 WAR 文件也有 2.7 版的杰克逊依赖项......仍然是同样的问题 把你的 graddle 文件放在题目中。 我已经粘贴了gradle文件代码和问题【参考方案2】:

我刚刚尝试运行任务 - gradle clean 时解决了我的问题。我认为一些旧的项目依赖关系一直存在到现在。这只是清理项目的问题。该项目现在运行良好。 :)

【讨论】:

【参考方案3】:

这是上面@BeñatBermejo 和@AkashRaveendran 已经给出的解决方案的替代解决方案。我很高兴 Akash 仅通过清理环境就能让他的系统正常工作,但我发现这对我来说还不够。

错误来自我的 pom 中的 jackson-databind 版本 2.8.1。但是,由于我还涉及到 Spring,jackson-databind 依赖项,即 jackson-core,仍然是 2.6.6。

我所要做的就是删除我的 jackson-databind 依赖项中的版本说明符。当我这样做时,Maven 使用了 Spring 命名的版本 2.6.6,而不包括对 JsonFormat$Value.empty() 的调用。

如果您需要一些 jackson 2.7+ 的功能,您可以尝试指定更高版本的 jackson-core 以及您尝试使用的 jackson 工件的任何其他依赖项。

但是,在涉及 Spring 的情况下,我会看看您是否可以使用它命名的较低的 jackson 版本,或者看看 Spring 是否可能发布了包含更新的 jackson 库的新版本。覆盖 Spring 的依赖结构破坏了首先使用 Spring 的最大原因之一:您可以获得一组经过更全面测试的相互关联的依赖关系,可以直接在此基础上构建。

【讨论】:

【参考方案4】:

从 .m2 目录中删除所有 jackson 文件,确保所有 jackson pom 即数据绑定、注释等具有相同的版本。如果需要降级您的版本,即杰克逊 2.7.3 运行良好,而不是 2.10.3

【讨论】:

以上是关于杰克逊注解 JsonFormat$Value json java.lang.NoSuchMethodError的主要内容,如果未能解决你的问题,请参考以下文章

@JsonFormat注解和@DateTimeFormat注解异同点

@JsonFormat注解和@DateTimeFormat注解异同点

@JsonFormat注解和@DateTimeFormat注解异同点

@JsonFormat注解和@DateTimeFormat注解异同点

页面输出格式常用注解----@JsonIgnore,@JsonFormat,@JsonFormat

@JsonInclude@JsonFormat@DateTimeFormat注解的使用