私はSpring BootでRESTサービスを構築しました。 1つのリクエストメソッドでは、着信リクエストと、Hibernate Validatorを使用して検証用に注釈を付けたObject
(@NotNull
など)との比較を検証しています。 RESTエンドポイントのコードは次のようになります。メソッドへの引数としてクラス名を渡す
@GetMapping(value = "/parameter-dates")
public ResponseEntity getParameterDates(ParameterDateRequest parameterDateRequest) {
Set<ConstraintViolation<ParameterDateRequest>> inputErrors = validator.validate(parameterDateRequest);
if (!inputErrors.isEmpty()) {
objectValidationErrorMessages = new ArrayList<>();
for (ConstraintViolation<ParameterDateRequest> constraintViolation : inputErrors) {
objectValidationErrorMessage = new ObjectValidationErrorMessage();
log.info("Error for user: " + loggedInUser.getUserEmail() +
" field: " + constraintViolation.getPropertyPath() + " with value: " + parameterDate.getParameterDateUnadjusted() +
" has error: " + constraintViolation.getMessage());
objectValidationErrorMessage.setFieldWithError(constraintViolation.getPropertyPath().toString());
objectValidationErrorMessage.setErrorMessage(constraintViolation.getMessage());
objectValidationErrorMessages.add(objectValidationErrorMessage);
}
return (new ResponseEntity(objectValidationErrorMessages, headers, HttpStatus.BAD_REQUEST));
}
//The rest of the code that is used when there is not validation errors
私はそれのmetodに検証エラーメッセージの作成を移動したいと思い、このように所有しています:などのコードで
public List<ObjectValidationErrorMessage> getErrorMessages(Class<?> clazz, Object model) {
List<ObjectValidationErrorMessage> objectValidationErrorMessages = new ArrayList<>();
Set<ConstraintViolation<?>> inputErrors = validator.validate(model);
if (!inputErrors.isEmpty()) {
for (ConstraintViolation<?> constraintViolation : inputErrors) {
objectValidationErrorMessage = new ObjectValidationErrorMessage();
objectValidationErrorMessage.setFieldWithError(constraintViolation.getPropertyPath().toString());
objectValidationErrorMessage.setErrorMessage(constraintViolation.getMessage());
objectValidationErrorMessages.add(objectValidationErrorMessage);
}
}
return objectValidationErrorMessages;
}
を今度はSet<ConstraintViolation<validatedClass>>
の次のエラーUnknow class: validateClass
が表示されます。 Class
の名前をこのメソッドの引数としてParameterDateRequest
に渡すにはどうすればよいですか?
更新: 私はClass<?> clazz
としてClass
を渡すことがうまく管理。
validate (T, Class<?>...) in Validator cannot be applied
to (java.lang.Object)
reason: Incompatible equality constraint: ? and T