人到中年有点甜
我不想逐个字段做空检查您可以避免自己编写支票,但您需要“标记”字段上的约束。并使用 Validator 显式验证实例。请注意,带注释的字段null在某个上下文中可能是强制性的,而null在另一个上下文中则不一定。并且它与这种方式兼容,因为验证器将仅在请求时验证对象:即按需。根据您的评论:我正在开发代码库,而您的解决方案具有侵入性。我将不得不接触创建该 pojo 的低级 json 解析器。我不想那样做在这种情况下,您可以使用要验证的当前类外部的 Map。它将允许维护您验证的字段的名称并在错误消息中使用它(对调试很有用)。例如 :Foo foo = new Foo();// set foo fields...// expected null but was not nullMap<String, Object> hasToBeNullMap = new HashMap<>();hasToBeNullMap.put("x", foo.getX());hasToBeNullMap.put("y", foo.getY());hasToBeNullMap.put("z", foo.getZ());String errrorMessageForNullExpected = getErrorFieldNames(hasToBeNullMap, Objects::nonNull);// expected not null but was nullMap<String, Object> hasToBeNotNullMap = new HashMap<>();hasToBeNotNullMap.put("z", foo.getZ());String errrorMessageForNotNullExpected = getErrorFieldNames(hasToBeNotNullMap, o -> o == null);private static String getErrorFieldNames(Map<String, Object> hasToBeNullMap, Predicate<Object> validationPred) { return hasToBeNullMap.entrySet() .stream() .filter(validationPred::test) .map(Entry::getKey) .collect(joining(","));}