Джексон: разделить JSON и заполнить известные и неизвестные свойства - PullRequest
0 голосов
/ 05 декабря 2018

Я кодирую сервис Spring-boot и использую Джексон ObjectMapper, чтобы справиться с jsons.

Мне нужно разделить json следующим образом:

{
  "copy": {
    "mode": "mode",
    "version": "version"
  },
  "known": "string value",
  "unknown": {
   "field1": "sdf",
   "field2": "sdfdf"
  },
  "unknown2": "sdfdf"
}

Я имею в виду, что мой компонент выглядит следующим образом:

public class MyBean {

    private CopyMetadata copy;
    private String known;
    private Object others;

}

Я хотел бы заполнить известные поля в MyBean свойствах и переместить другие неизвестные свойства в свойство MyBean.others.

Известные свойства, которые размещаются в виде поля внутри MyBean.

Есть идеи?

1 Ответ

0 голосов
/ 05 декабря 2018

Возможное решение этой проблемы - использовать аннотации Джексона @JsonAnyGetter and @JsonAnySetter

Ваша модель Mybean.class должна выглядеть примерно так, и она должна работать

import java.util.HashMap;
import java.util.Map;

import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;

public class MyBean {

    private CopyMetadata copy;
    private String known;
    private Map<String, Object> others = new HashMap<>();

    public CopyMetadata getCopy() {
        return copy;
    }

    public void setCopy(CopyMetadata copy) {
        this.copy = copy;
    }

    public String getKnown() {
        return known;
    }

    public void setKnown(String known) {
        this.known = known;
    }

    public Map<String, Object> getOthers() {
        return others;
    }

    public void setOthers(Map<String, Object> others) {
        this.others = others;
    }

    @JsonAnyGetter
    public Map<String, Object> getUnknownFields() {
        return others;
    }

    @JsonAnySetter
    public void setUnknownFields(String name, Object value) {
        others.put(name, value);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...