当使用 ObjectMapper 把对象转化为 json 字符串时 出现以下错误
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class Person and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
要序列化的类:
@Builder
public class Person implements Serializable {
private static final long serialVersionUID = 748544488353157856L;
/** 身份证号 */
private String id;
/** 姓名 */
private String userName;
/** 年龄 */
private int age;
}
序列化的测试代码
public class PersonToJSONTest {
public static void main(String[] args) {
Person sunXi = Person.builder().id("3422102").userName("小汐").age(3)
.build();
ObjectMapper objectMapper = new ObjectMapper();
try {
String jsonValue = objectMapper.writeValueAsString(sunXi);
System.out.println(jsonValue);
}
catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
此时会出现 com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class Person and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) 异常
只需要在 Person 类中加入 get方法即可
@Builder
@Getter
public class Person implements Serializable {
private static final long serialVersionUID = 748544488353157856L;
/** 身份证号 */
private String id;
/** 姓名 */
private String userName;
/** 年龄 */
private int age;
}
问题解决。
WriteValueAsString方法依靠实体类中的getter方法,如果要序列化的属性没有getter方法会InvalidDefinitionException异常