有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Jackson JSON在将值添加到列表之前检查这些值

代码段:

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个字符,或者名称与某些正则表达式等匹配,我不希望创建对象并将其添加到列表中。相反,我希望抛出一个IOException,例如“输入数据错误”。我不允许创建更多的自定义类


共 (1) 个答案

  1. # 1 楼答案

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

    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:我还在努力学习英语。请随意编辑