在项目代码调测阶段,整了半个下午,一致报JsonMappingException异常。灰常郁闷~
刚开始是我引用的jar报编译版本是jar1.7的,而我的项目编译的jdk是1.6,所以报版本不支持,这个我就忍了。关键是处理掉之后就开始报上面这个错误。。。就自己写了个测试程序,看下问题出在哪里了:
package com.test;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Test {
public static void main(String[] args) throws JsonProcessingException {
Apple a = new Apple(1);
ObjectMapper om = new ObjectMapper();
String s = om.writeValueAsString(a);
System.out.println(s);
}
}
class Apple{
public Apple(int size) {
super();
this.size = size;
}
private int size;
}
然后就抛异常了:
Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class com.test.Apple and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:284)
at com.fasterxml.jackson.databind.SerializerProvider.mappingException(SerializerProvider.java:1110)
at com.fasterxml.jackson.databind.SerializerProvider.reportMappingProblem(SerializerProvider.java:1135)
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:69)
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:32)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:292)
at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3681)
at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3057)
at com.test.Test.main(Test.java:10)
就上网查询了一下,原来ObjectMapper默认配置是:只能对那些有访问权限的属性进行转换!分为两类:1.public field;
2.具有getter/setter方法的private属性;
所以当我把Apple对象的getter/setter方法补充完整后就正常了!
其实还有一种解决方案:就是更改ObjectMapper的配置—-
om.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
这样就可以把private属性也进行字符串转换了!