代码之家  ›  专栏  ›  技术社区  ›  Ryuzaki L

如何检查json字段为空和空

  •  0
  • Ryuzaki L  · 技术社区  · 6 年前

    我试图检查json字段是否为空,它是为空字符串工作的,而不是为空字符串工作的

    Lombok我刚用过重写tostring,但我用的是Jackson库

    import lombok.ToString;
    
    @ToString
    public class DefaultModel {
    
        private String name;
        private String age;  
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            if (age.trim().isEmpty()||age==null) {
                this.age="101";
            } else {
                this.age=age;
            }
        }
    }
    

    这是控制器:

    @RequestMapping(value="/default", method=RequestMethod.POST)
    public DefaultModel m1(@RequestBody() DefaultModel model) {
        System.out.println(model);
        return model;
    }
    

    它对空字符串起作用,但当我没有在body中传递json字段时就不起作用了

    故障情况:

    {
        "name":"some"
    }
    

    我知道另一个例子是愚蠢的,但我试过了,而且我甚至不想给这个空值0.1%

    {
        "name":"some",
        "age":null
    }
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   Facundo Larrosa    6 年前

    管理要插入到反序列化pojo中的值的一个很好的jackson方法是实现一个自定义jackson反序列化器。在你的情况下,它看起来像这样:

    class DefaultModelDeserializer extends JsonDeserializer<DefaultModel> {
    
        @Override
        public DefaultModel deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
            DefaultModel responseModel = jp.readValueAs(DefaultModel.class);
    
            DefaultModel finalModel = new DefaultModel();
            finalModel.setName(responseModel.name);
            finalModel.setAge(responseModel.age == null || age.trim().isEmpty() ? "101" : responseModel.age);
    
            return finalModel;
        }
    
    }
    

    然后,应使用自定义反序列化程序对DefaultModel类进行注释:

    @JsonDeserialize(using = DefaultModelDeserializer.class)
    public class DefaultModel {
    
        ...
    }
    
        2
  •  0
  •   Mark Thomas    6 年前

    在您的if语句中: if (age.trim().isEmpty() || age==null) 首先需要检查空值,否则当 age.trim() 如果值为空,则调用方法。

    只需将其更改为: if (age==null || age.trim().isEmpty())