1、报错信息
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "stu_id1" (class com.txc.objectmapper.bean.Student), not marked as ignorable (2 known properties: "stu_id", "stu_name"])
at [Source: (String)"{"stu_id1":"1001","stu_name":"晓春""; line: 1, column: 13] (through reference chain: com.txc.objectmapper.bean.Student["stu_id1"])
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61) ~[jackson-databind-2.13.5.jar:2.13.5]
2、问题分析
出现这个问题的原因是将JSON字符串转化成对象的时候,JSON字符串中出现了属性名称与对象中的名称不一致的情况,而造成的解析错误。
案例:如对象字段如下:
public class Student {
private String stu_id;
private String stu_name;
}
JSON字符串如下:
String param = "{\"stu_id1\":\"1001\",\"stu_name\":\"晓春\"";
两者比较:
Student中的是stu_id而param中的是stu_id1
错误代码展示
@RequestMapping("/commonQuestion1")
@ResponseBody
public void commonQuestion1() throws Exception{
ObjectMapper mapper = new ObjectMapper();
String param = "{\"stu_id1\":\"1001\",\"stu_name\":\"晓春\"";
//将字符串转换为对象
Student student = mapper.readValue(param, Student.class);
System.out.println("===json转对象==="+student.toString());
}
3、解决方案
通过如下配置解决:
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
说明:
readValue实现将JSON字符串转化成对应的Student对象。
正确代码展示:
@RequestMapping("/commonQuestion1")
@ResponseBody
public void commonQuestion1() throws Exception{
ObjectMapper mapper = new ObjectMapper();
//忽略未知字段
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
String param = "{\"stu_id1\":\"1001\",\"stu_name\":\"晓春\"}";
//将字符串转换为对象
Student student = mapper.readValue(param, Student.class);
System.out.println("===json转对象==="+student.toString());
}