jackson java.lang.NoClassDefFoundError
场景 :
使用jackson解析json字符串转为pojo对象
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
String xml ="<?xml version=\"1.0\" encoding=\"UTF-8\" ?><root><TcpCont><MvnoID>SJHL01</MvnoID><InterfaceCode>Svc_ProvisionRet</InterfaceCode><MessageID>SJHL01201808090058195645</MessageID><RspTime>20180809005825</RspTime><RspCode>002</RspCode><Token>66905acba6fb790bf6fe9ef2582636c6581810f9439e14d6963217f802785913</Token></TcpCont><SvcRetCont><BusiRet><RetCode>0000</RetCode><RetDesc>处理成功</RetDesc><DoneCode>2000000022012604</DoneCode></BusiRet></SvcRetCont></root>";
XmlMapper xmlMapper = new XmlMapper(); // 这里拿取 com.fasterxml.jackson.dataformat 包的对象无法获取类信息
Map map = xmlMapper.readValue(xmlss, Map.class);
System.out.println(map);
编译通过,但是在JVM运行的时候 无法找到这个类
报错信息如下 :
java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/util/JacksonFeature
at com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(XmlMapper.java:155)
at com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(XmlMapper.java:144)
at com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(XmlMapper.java:126)
at com.dcits.sz.Map2Xml.test33(Map2Xml.java:499)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
当时依赖的jar包
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.12.3</version>
</dependency>
解决方案 : 更换 pom 依赖 ,为 框架版本锁定的版本
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>