当前位置: 首页 > 知识库问答 >
问题:

Jackson@JSONProperty(required=true)不会引发异常

轩辕炎彬
2023-03-14

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

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"));
{"GENDER":"FEMALE","VERIFIED":true,"IMG":"AQ8="}

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

共有1个答案

孙梓
2023-03-14

根据Jackson annotations javadocs:“注意,从2.0开始,BeandeSerializer不使用该属性:预计将为以后的次要版本添加支持。”

即:使用此设置不执行验证。它(当前)仅用于生成JSON模式,或由自定义代码使用。

 类似资料:
  • 问题内容: 我正在使用jackson 2.2批注@JsonProperty,并将required设置为true。通过ObjectMapper readValue()方法反序列化不包含该属性的json文件时,不会引发异常。它应该以其他方式工作还是我错过了什么? 我的DTO课程: 这是我如何反序列化类: 实际上是这样的: Actuall json看起来像: 我希望这是因为json文件中未指定_name

  • 问题内容: 我已经坚持了好几个星期,而且我没有最模糊的想法出了什么问题。我已经很浪费了,因为我已经浪费了很多时间 我使用下面描述的数据模型(MySQL)。我已经通过反向工程(Eclipse / JBoss Tools)创建了hbm.xml和java类(请参见下面的示例)。 当我尝试保存推文,单词或事件时,我可以在日志消息中看到生成了pk值并且正确绑定了参数,但是没有任何内容写入数据库。(请参阅帖子

  • 问题内容: 我在接口抛出异常的地方读了这段代码,但是实现它的类却没有抛出异常或捕获异常,这是为什么呢?在Java中合法或安全吗? 问题答案: 实现和扩展的一般规则是,您可以使新类或接口的限制较少,而不能限制较多。如果您认为将异常作为限制进行处理的要求,则未声明异常的实现的限制性较小。对该接口进行编码的任何人都不会遇到您的课的麻烦。 -斯坦·詹姆斯 作为http://www.coderanch.co

  • 问题内容: 我正在使用JAXB XMLadapter来编组和解组布尔值。C#应用程序也将访问该应用程序的XML文件。我们必须验证此XML文件,这是使用XSD完成的。C#应用程序为布尔节点写入“ True”值。但是我们的XSD确实验证了同样的结果,因为它只允许“ true / false”或“ 1/0”。因此,我们在XSD中将String保留为布尔值,并且XMLAdapter会验证该字符串是否在我们

  • 问题内容: 我有以下代码,我希望它抛出,但运行成功。为什么会这样? 问题答案: 的上方法删除指定位置的元素。在开始循环之前,您的列表如下所示: 然后,在列表上启动迭代器: 您的环然后删除 位置1处的元件 ,这是数字2: 在下一个隐式调用上,迭代器返回,然后循环终止。 如果将更多元素添加到列表中,则会得到一个。然后隐式将抛出。 请注意,从Javadoc 到JCF: 注意,迭代器的快速失败行为无法得到

  • 我正在使用SQLServer,并且我有一个实体“注册”,其中包含student(student),作为ManyToOne关系。我尝试将student列名设置为“user”,这是一个SQL保留的关键字。 我还设置了,它将删除并创建表。 注意:我知道保留的SQL关键字可以用[USER]或“USER”转义。 当我执行测试主代码时,我确实从EclipseLink获得了一个DatabaseException