代码之家  ›  专栏  ›  技术社区  ›  jlanza

解组JsonNode更改数据类型

  •  0
  • jlanza  · 技术社区  · 7 年前

    我有这样一门课:

    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"
    }
    

    我认为创建两个setter就足够了,但我认为需要另一个指令。

    任何帮助都是受欢迎的。

    编辑:部分解决方案

    通过在其中一个setter中设置JsonProperty,它只适用于一种情况,但我希望同时使用这两种情况。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Renjith    7 年前

    只是一个想法。接受一个对象类型怎么样!!?

    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]