为了账号安全,请及时绑定邮箱和手机立即绑定

解组 JsonNode 更改数据类型

解组 JsonNode 更改数据类型

烙印99 2021-10-28 14:23:29
我有一个类: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"}我认为通过创建两个 setter 就足够了,但我认为需要另一个指令。任何帮助都非常受欢迎。编辑:部分解决方案通过在其中一个 setter 中设置 JsonProperty,它适用于一种情况,但我同时想要两者。
查看完整描述

1 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

只是一个想法。接受一个 Object 类型怎么样!!?然后您可以进行 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]


查看完整回答
反对 回复 2021-10-28
  • 1 回答
  • 0 关注
  • 171 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信