加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 杰克逊在地图中捕捉到无法识别的字段

发布时间:2020-12-15 04:39:01 所属栏目:Java 来源:网络整理
导读:我在 java Rest Api中使用Jackson来处理请求参数. 我的班级: public class ZoneModifBeanParam extends ModifBeanParamZone {@FormParam("type")private String type;@FormParam("geometry")private Geometry geometry;@FormParam("name")private String na
我在 java Rest Api中使用Jackson来处理请求参数.

我的班级:

public class ZoneModifBeanParam extends ModifBeanParam<Zone> {
@FormParam("type")
private String type;

@FormParam("geometry")
private Geometry geometry;

@FormParam("name")
private String name;

...

我的API界面:

@POST
@Consumes("application/json")
@Produces("application/json; subtype=geojson")
@ApiOperation(value = "Create a zone",notes = "To create a zone")
public Response createZone(ZoneModifBeanParam zoneParam) {

...

这工作正常,但我需要接收我的Bean在地图中未指定的其他参数.
示例:

{
   "geometry": {...},"name": "A circle name","type": "4","hello": true
}

通过接收这个我需要存储在一个Map(名为unrecognizedFields并在我的bean中声明)这对夫妇(“你好”,真实).

是否有任何注释或对象允许这个?

解决方法

只需使用 @JsonAnySetter.这就是它的用途.这是一个测试用例

public class JacksonTest {

    public static class Bean {
        private String name;
        public String getName() { return this.name; }
        public void setName(String name) { this.name = name; }

        private Map<String,Object> unrecognizedFields = new HashMap<>();

        @JsonAnyGetter
        public Map<String,Object> getUnrecognizedFields() {
            return this.unrecognizedFields;
        }

        @JsonAnySetter
        public void setUnrecognizedFields(String key,Object value) {
            this.unrecognizedFields.put(key,value);
        }
    }

    private final String json
            = "{"name":"paul","age":600,"nickname":"peeskillet"}";
    private final ObjectMapper mapper = new ObjectMapper();

    @Test
    public void testDeserialization() throws Exception {
        final Bean bean = mapper.readValue(json,Bean.class);
        final Map<String,Object> unrecognizedFields = bean.getUnrecognizedFields();

        assertEquals("paul",bean.getName());
        assertEquals(600,unrecognizedFields.get("age"));
        assertEquals("peeskillet",unrecognizedFields.get("nickname"));
    }
}

@JsonAnyGetter用于序列化方面.序列化bean时,您将看不到JSON中的unrecognizedFields.相反,地图中的所有属性都将序列化为JSON中的顶级属性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读