遇到这个问题时我找到了
SpringMVC @RequestBody问题:Unrecognized field , not marked as ignorable
这篇文章里说:
@JsonIgnoreProperties(ignoreUnknown = true),将这个注解写在类上之后,就会忽略类中不存在的字段,可以满足当前的需要。这个注解还可以指定要忽略的字段。使用方法如下:
@JsonIgnoreProperties({ "internalId", "secretKey" })
指定的字段不会被序列化和反序列化。
但是我的bean是类似这样的:
public class P { private C c; public C getC() { return c; } public void setC(C c) { this.c = c; } @Override public String toString() { return "P [c=" + c + "]"; } } public class C { private String a; private String b; private String c; public String getA() { return a; } public void setA(String a) { this.a = a; } public String getB() { return b; } public void setB(String b) { this.b = b; } public String getC() { return c; } public void setC(String c) { this.c = c; } @Override public String toString() { return "C [a=" + a + ", b=" + b + ", c=" + c + "]"; } }
我的JSON是这样的:
{"c":{"a":"1","b":"2","c":"3","d":"4"}}
我要转换的是P类,而注解只有写到C类上才有效。而实际应用中,C类是别人提供的公共类,不可能修改。所以注解方式失败。
于是我有找到了这篇文章:
jackson json 转换Bean, Bean 里没有对应的值 jackson Unrecognized field
但是这里面说的是Jackson1,而我用的是最新版2,所以按照他的写法并不适用。
找了资料也没找到有用的,然后自己试了下,2.X版本后改成这样:
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
这样就解决问题了!
时间: 2024-11-08 18:49:44