SpringBoot项目启动报错:java.lang.NoClassDefFoundError: Could not initialize class org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
错误信息如下:
java.lang.NoClassDefFoundError: Could not initialize class org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
at org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter.<init>(AllEncompassingFormHttpMessageConverter.java:61) ~[spring-web-4.2.6.RELEASE.jar:4.2.6.RELEASE]
at org.springframework.web.client.RestTemplate.<init>(RestTemplate.java:158) ~[spring-web-4.2.6.RELEASE.jar:4.2.6.RELEASE]
at org.springframework.cloud.config.client.ConfigServicePropertySourceLocator.getSecureRestTemplate(ConfigServicePropertySourceLocator.java:151) ~[spring-cloud-config-client-1.1.1.RELEASE.jar:1.1.1.RELEASE]
at org.springframework.cloud.config.client.ConfigServicePropertySourceLocator.locate(ConfigServicePropertySourceLocator.java:69) ~[spring-cloud-config-client-1.1.1.RELEASE.jar:1.1.1.RELEASE]
at org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration.initialize(PropertySourceBootstrapConfiguration.java:89) ~[spring-cloud-context-1.1.1.RELEASE.jar:1.1.1.RELEASE]
at org.springframework.boot.SpringApplication.applyInitializers(SpringApplication.java:640) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:343) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
可以到AllEncompassingFormHttpMessageConverter类中看到一下代码,发现是通过new MappingJackson2HttpMessageConverter()来创建MappingJackson2HttpMessageConverter
if (jackson2Present) {
addPartConverter(new MappingJackson2HttpMessageConverter());
}
在debug状态下单独执行本行代码会报出以下错误,意思是找不到jackson-annotations,jar包中JsonSetter的Value,我的项目项目中发现有三个版本的jackson-annotations包,但是仅在jackson-annotations-2.9.0.jar包中JsonSetter中存在Value,故将其他版本排除,项目启动成功,万事大吉
java.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonSetter$Value
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at org.springframework.util.ClassUtils.getMethodIfAvailable(ClassUtils.java:669)
at org.springframework.util.ClassUtils.hasMethod(ClassUtils.java:603)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.<clinit>(AbstractJackson2HttpMessageConverter.java:65)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter.<init>(AllEncompassingFormHttpMessageConverter.java:61)
at org.springframework.boot.autoconfigure.BackgroundPreinitializer$MessageConverterInitializer.run(BackgroundPreinitializer.java:107)
at org.springframework.boot.autoconfigure.BackgroundPreinitializer$1.runSafely(BackgroundPreinitializer.java:67)
at org.springframework.boot.autoconfigure.BackgroundPreinitializer$1.run(BackgroundPreinitializer.java:60)
at java.lang.Thread.run(Thread.java:748)