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

在POJO类中为JSON映射定义必需字段

艾弘义
2023-03-14
[
    {
        firstKey : "value1",
        secondKey : "value2",
        thirdKey : "value3"
    },
    {
        firstKey : "value4",
        secondKey : "value5",
        thirdKey : "value6"
    }
]

另外,如果一个键的值为null,那么它就是被接受的默认值,所以我也不能使用@NotNull。对于eg:[{firstKey:null,secondKey:“value2”,thirKey:“value3”}]是有效的JSON,在反序列化过程中应该毫无异常地进行解析

共有1个答案

督宏旷
2023-03-14

验证功能总体上没有在Jackson中实现,因为它被认为超出了范围,请参见例如Jackson-Required Property?。

关于注释@JSONProperty(required=true)对字段不起作用的一些信息可以在这里找到:Jackson@JSONProperty(required=true)dost't throw an exception。

但是,有一个技巧可能适用于null&现有的值良好的字段值,但如果该字段完全丢失,则抛出异常。创建带有注释@jsonCreator的构造函数(并且不要创建默认构造html" target="_blank">函数!)其中使用了相同的注释@jsonProperty(value=“*field_name*”,required=true),如果缺少字段,它将抛出,如下所示:

@Getter @Setter
public class KeyHolder {
    private String firstKey;
    private String secondKey;
    private String thirdKey;

    @JsonCreator
    public KeyHolder(
            @JsonProperty(value = "firstKey", required = true) String firstKey,
            @JsonProperty(value = "secondKey", required = true) String secondKey,
            @JsonProperty(value = "thirdKey", required = true) String thirdKey) {
        this.firstKey = firstKey;
        this.secondKey = secondKey;
        this.thirdKey = thirdKey;
    }

}

有了这些,做:

new ObjectMapper().readValue("{ \"firstKey\": \"val1\", \"secondKey\": \"val2\" }"
        , KeyHolder.class);

应该导致类似的结果:

com.fasterxml.jackson.databind.exc.MisMatchedInputException:缺少必需的创建者属性“第三键”(索引%2)

@JsonProperty(value = "fourthKey", required = true) String fourthKey) {
this.fourthKey = fourthKey;
 类似资料:
  • 我和jackson一起绘制地图,我有点迷茫。我的Json具有以下结构 我确实找到了很多处理数组的教程,但我在第一个标记“d”时就已经失败了。而且根本不需要所有的“_元数据”标记。 我创建了一个包含lastName等属性和一个集合附件的pojo。但我的代码在标记“d”或“_元数据”时总是失败 还有杰克逊的读者 任何提示都将不胜感激。 问候马蒂亚斯

  • 我有一个API,它以以下格式返回JSON: 我还有一个POJO类,它具有与JSON响应的键对应的字段,因为、和键在我的用例中不相关。 是否可以将JSON响应映射到我的JavaPOJO类,即只映射键内的值? 一种可能的方法是接受String响应,并使用setter方法将其映射到我的POJO。 有更好的办法吗。像这样的

  • 我将jOOQ与普通SQL(不是生成的代码)一起使用。我试图直接选择一个POJO,它有一些enum类型的字段。 在我看来,我只能为我的整个POJO指定一个高级映射器,如下所示: 我找不到仅为某些字段提供映射或转换器的方法。具体来说,我想告诉jooq“正常转换所有字段,除非我的POJO中的字段是MyEnum类型的,在这种情况下使用这个映射(或转换器)”。 如何为某些字段而不是其他字段指定映射器? 顺便

  • 我使用JAVA jackson将JSON映射到JAVA pojo对象,我的JSON文件是: 在之后,我收到了以下错误消息: 不能反序列化出START_ARRAY令牌 我的POJO课程: 请问,这种JSON格式的正确java POJO是什么?谢谢

  • 我尝试过将proto转换为java pojo。但得到了错误 [Stderr]命令。原型:12:18:预期为“必需”、“可选”或“重复”。[Stderr]命令。proto:12:21:应为字段名。 请帮我做些需要改变的事情。我在谷歌protobuf开发者网站上搜索https://developers.google.com/protocol-buffers/docs/proto#maps它表示映射字段

  • 我一直在研究Jackson,但似乎必须将映射转换为JSON,然后将生成的JSON转换为POJO。 有没有一种方法可以将地图直接转换成POJO?