Джексон десериализация anysetter NPE - PullRequest
0 голосов
/ 05 сентября 2018
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Payer{
    private String name;

    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();

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

    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
    }
}

Когда я использую objectmepper.readValue(json_string, Payer.class) со следующей строкой json:

{
   "name": "fakeName",
   "state": "verifird"
}

Я получаю NPE. Поскольку у меня есть @JsonAnySetter, строка state должна быть помещена в additionalProperties, я хотел бы знать, почему я получаю NPE здесь?

1 Ответ

0 голосов
/ 06 сентября 2018

Включите геттер и сеттер для name в Payer классе:

@JsonInclude(JsonInclude.Include.NON_NULL)
class Payer{
    private String name;

    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();

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

    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
    }

    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }

}

Разбор Json:

  public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
    ObjectMapper mapper = new ObjectMapper();
    String json_string = "{\n" +
        "   \"name\": \"fakeName\",\n" +
        "   \"state\": \"verifird\"\n" +
        "}";
    Payer readValue = mapper.readValue(json_string , Payer.class);
    System.out.println(readValue.getName());
    System.out.println(readValue.getAdditionalProperties());
  }

Выход:

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