【问题标题】:Jackson JSON check values before adding them to list杰克逊 JSON 在将它们添加到列表之前检查值
【发布时间】:2018-08-23 13:56:17
【问题描述】:

代码sn-p:

ObjectMapper objectMapper = new ObjectMapper();
            try {
                this.persons = objectMapper.readValue(new File(fileName),
                        new TypeReference<List<Person>>() {
                });
            } catch (IOException ex) {

            }

json 输入示例:

[
  {
    "id": 1,
    "name": "The Best",
    "email": "thenextbigthing@gmail.com",
    "birthDate": "1981-11-23"
  },
  {
    "id": 2,
    "name": "Andy Jr.",
    "email": "usa@gmail.com",
    "birthDate": "1982-12-01"
  },
  {
    "id": 3,
    "name": "JohnDoe",
    "email": "gameover@gmail.com",
    "birthDate": "1990-01-02"
  },
  {
    "id": 4,
    "name": "SomeOne",
    "email": "rucksack@gmail.com",
    "birthDate": "1988-01-22"
  },
  {
    "id": 5,
    "name": "Mr. Mxyzptlk",
    "email": "bigman@hotmail.com",
    "birthDate": "1977-08-12"
  }
]

我想知道是否可以(然后如何?)在创建对象之前检查值并将其添加到列表中。例如,如果电子邮件地址或名称超过 30 个字符,或者名称与某些正则表达式匹配等,我不希望创建对象并将其添加到列表中。相反,我想用类似“输入数据错误”。我不允许创建更多的自定义类。

【问题讨论】:

  • 如果您使用的是 DTO,您可以将 set 方法设置为您的规则。这是我的建议。
  • Jackson 用于 JSON 解析而不是用于验证。
  • 如果我想检查添加到列表中的最后一个对象然后在出现问题时停止解析怎么办?
  • 查看我的回答/建议。

标签: java json parsing jackson


【解决方案1】:

我相信你不能这样做,因为杰克逊的工作是解析,而不是验证。 我的建议:

public boolean checkJson(String jsonStr, Class<?> valueType) throws JsonParseException, IOException {
    ObjectMapper mapper = new ObjectMapper();
    try {
        List<TypeHere> list = mapper.readValue(jsonStr, valueType);
        return list.stream().anyMatch(s -> s.length() < 30);
    } catch (JsonMappingException e) {
        return false;
    } 
}

您可以抛出一个异常,而不是返回一个布尔值。

Obs:我还在研究我的英语。请随时编辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    相关资源
    最近更新 更多