代码段:
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,例如“输入数据错误”。我不允许创建更多的自定义类。
答案 0 :(得分:-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:我还在努力学习英语。请随时进行编辑。