项目中有基本编辑(属性页面组件化)和高级编辑(直接文本方式)两个编辑功能,高级编辑中可以随意的新增字段,但是到了基本编辑中,初始化页面的属性值是通过后台获取的json转成javaBean而来,保存是进行了patch操作,导致高级编辑中新增的字段被删除,为了防止这种操作,如果高级编辑中新增了字段,那么进入基本编辑页面时,把保存按钮disabled掉,那么就需要判断json字符串中是否存在javaBean没有被定义的字段,本文通过使用jackson来判断这个条件,具体如下:
A.java
package bean;
import java.io.Serializable;
public class A implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String name;
private String sex;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "A [name=" + name + ", sex=" + sex + ", age=" + age + "]";
}
}
Test.java
import bean.A;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException;
public class Test {
public static void main(String[] args) {
String jsonStr="{\"name\" : \"zs\",\"height\":160}";
ObjectMapper o = new ObjectMapper();
A a = null;
try {
a = o.readValue(jsonStr, A.class);
} catch (Exception e) {
if(e instanceof UnrecognizedPropertyException){
e.printStackTrace();
}
}
}
}
运行之后结果:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "height" (class bean.A), not marked as ignorable (3 known properties: , "name", "sex", "age"])
at [Source: java.io.StringReader@1a25848; line: 1, column: 28] (through reference chain: bean.A["height"])
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:79)
at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:555)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:708)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1160)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:315)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034)
at Test.main(Test.java:15)
附近中有使用的jackson相关jar