java - Jackson @JsonProperty(required=true) 不会抛出异常

我正在使用 jackson 2.2 注释 @JsonProperty 并将 required 设置为 true。通过 ObjectMapper readValue() 方法反序列化不包含该属性的 json 文件时,不会引发异常。 它应该以不同的方式工作还是我错过了什么?

我的 dto 类:

public class User {
    public enum Gender {MALE, FEMALE}

    ;

    public static class Name {
        private String _first, _last;

        public String getFirst() {
            return _first;
        }

        public String getLast() {
            return _last;
        }

        public void setFirst(String s) {
            _first = s;
        }

        public void setLast(String s) {
            _last = s;
        }
    }

    private Gender _gender;
    private Name _name;
    private boolean _isVerified;
    private byte[] _userImage;

    @JsonProperty(value ="NAAME",required = true)
    public Name getName() {
        return _name;
    }

    @JsonProperty("VERIFIED")
    public boolean isVerified() {
        return _isVerified;
    }

    @JsonProperty("GENDER")
    public Gender getGender() {
        return _gender;
    }
    @JsonProperty("IMG")
    public byte[] getUserImage() {
        return _userImage;
    }

    @JsonProperty(value ="NAAME",required = true)
    public void setName(Name n) {
        _name = n;
    }
    @JsonProperty("VERIFIED")
    public void setVerified(boolean b) {
        _isVerified = b;
    }
    @JsonProperty("GENDER")
    public void setGender(Gender g) {
        _gender = g;
    }
    @JsonProperty("IMG")
    public void setUserImage(byte[] b) {
        _userImage = b;
    }
}

这是我如何反序列化类:

public class Serializer {
    private ObjectMapper mapper;

    public Serializer() {
        mapper = new ObjectMapper();
        SimpleModule sm = new SimpleModule("PIF deserialization");
        mapper.registerModule(sm);
    }

    public void writeUser(File filename, User user) throws IOException {
        mapper.writeValue(filename, user);
    }

    public User readUser(File filename) throws IOException {
          return mapper.readValue(filename, User.class);
      }
}

实际上是这样称呼的:

    Serializer serializer = new Serializer();
    User result = serializer.readUser(new File("user.json"));

实际的 json 看起来像:

{"GENDER":"FEMALE","VERIFIED":true,"IMG":"AQ8="}

我希望因为 _name 没有在 json 文件中指定,并且需要抛出异常。

最佳答案

使用 Jackson 2.6,您可以使用 required,但是您必须使用 JsonCreator 来完成

例如:

public class MyClass {

    @JsonCreator
    public MyClass(@JsonProperty(value = "x", required = true) Integer x, @JsonProperty(value = "value_y", required = true) Integer y) {
        this.x = x;
        this.y = y;
    }

    private Integer x;
    private Integer y;
}

如果 x 或 y 不存在,则在尝试反序列化时将引发异常。

https://stackoverflow.com/questions/18320731/

相关文章:

javascript - Ajax调用完成后执行函数

javascript - D3.js:使用图像(在数据中指定文件名)作为轴上的刻度值

python - 从文本文件中检索变量值的最佳方法?

java - Jackson - 反序列化 JSON 字符串 - TypeReference 与 T

javascript - 有没有一种快速的方法可以在文本编辑器中将 JavaScript 对象转换为

sql - Postgresql 中的 `->>` 和 `->` 有什么区别?

json - 如何将 JSON 文件导入 TypeScript 文件?

javascript - 使用 jQuery 检查 JSON 对象中是否存在键

ruby-on-rails-3 - 如何使用 ActiveModel::Serializers 为同

java - 如何将 JSON 字段名称映射到不同的对象字段名称?