Unmarshall JsonNode更改数据类型

时间:2018-10-05 11:24:39

标签: java json jackson

我有一个类似的课程:

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);
    }
}

我想知道我可以使用Jackson解除这些JSON文档的编组:

{
   "status" = true
}

{
   "status" = "free"
}

我认为通过创建两个设置器将绰绰有余,但我认为还需要另一个指令。

任何帮助都非常欢迎。

编辑:部分解决方案

通过在一个设置器中设置JsonProperty,它可以在一种情况下工作,但我希望同时使用两者。

1 个答案:

答案 0 :(得分:2)

只是一个想法。那代替接受一个对象类型呢!! 然后,您可以执行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]