Unmarshall JsonNode изменяет тип данных - PullRequest
0 голосов
/ 05 октября 2018

У меня есть класс, подобный:

Class myClass {
    @JsonProperty("status")
    boolean status;

    public boolean getStatus() {
        return status;
    }

    public boolean setStatus(boolean status) {
        this.status = status;
    }

    public boolean setStatus(String status) {
        this.status = "free".equals(status);
    }
}

Я хотел бы знать, кого я могу разобрать, используя Джексона, следующие документы JSON:

{
   "status" = true
}

{
   "status" = "free"
}

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

Любая помощь более чем приветствуется.

Редактировать: Частичное решение

Установив JsonProperty в одном из сеттеровэто работает для одного случая, но я хочу оба одновременно.

1 Ответ

0 голосов
/ 05 октября 2018

Просто мысль.А как насчет принятия типа объекта вместо этого?Затем вы можете выполнить проверку instanceOf и установить ее соответствующим образом.

public class MyClass {

    @JsonProperty("status")
    Object status;

    public boolean isStatus() {
        return Boolean.valueOf(status.toString());
    }

    public void setStatus(Object status) {
        if(status instanceof Boolean){
            this.status = status;
        }else if(status instanceof String){
            this.status = status.toString().equals("free");
        }
    }

    @Override
    public String toString() {
        return "MyClass [status=" + status.toString() + "]";
    }

}

Тест

String jsonString_1 = "{ \"status\":true}";
String jsonString_2 = "{ \"status\":\"free\"}";

ObjectMapper objectMapper = new ObjectMapper();

MyClass myObj_1 = objectMapper.readValue(jsonString_1.getBytes(), MyClass.class);
MyClass myObj_2 = objectMapper.readValue(jsonString_2.getBytes(), MyClass.class);

System.out.println(myObj_1);
System.out.println(myObj_2);

Результат

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