我最近了解到以下行为是默认行为:
public static void main(String[] args) throws JsonProcessingException {
final ObjectMapper objectMapper = new ObjectMapper();
final MyClass aNull = objectMapper.readValue(" null", MyClass.class);
// works and aNull == null
final MyClass bNull = objectMapper.readValue((String) null, MyClass.class);
// throws IllegalArugmentException
}
public static class MyClass {
public String value;
}
我觉得这有点违反直觉。
有没有办法强制进行“严格”解析并使第一个示例抛出
IllegalArugmentException
(或任何其他异常)?
我们想要这个,因为否则我们需要进行广泛的输入验证或包装扩展
ObjectMapper
来覆盖行为。
怎么样
var input = // string input
var ob = objectMapper.readValue(input, MyClass.class);
return Optional.ofNullable(ob)
.orElseThrow(() -> new IllegalArugmentException("Invalid Input"));