使用jackson將實體對象轉換成map的時候報錯:
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
Student obj = new Student();
obj.setName("mkyong");
obj.setAge(34);
obj.setSkills(Arrays.asList("java", "node"));
// object -> Map
Map<String, Object> map = mapper.convertValue(obj, Map.class);
logger.info(JSON.toJSONString(map));
}
報錯信息如下:java.lang.NoSuchMethodError
Exception in thread "main" java.lang.NoSuchMethodError: com.fasterxml.jackson.core.json.JsonWriteContext.createChildObjectContext(Ljava/lang/Object;)Lcom/fasterxml/jackson/core/json/JsonWriteContext;
at com.fasterxml.jackson.databind.util.TokenBuffer.writeStartObject(TokenBuffer.java:720)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:174)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4180)
at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:4133)
原因:升級了jackson 版本導致的,之前用的 2.6.3 升級到 2.10以上後出現了這個問題。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.3</version>
</dependency>
升級後執行失敗了。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.1</version>
</dependency>
正確的引用方法如下,注意是3個同時引入,這樣纔不會丟失方法。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.11.1</version>
</dependency>