I use spring boot 3, I search to centralize error handling about validation
public record RepoPubRecord(
@NotEmpty(groups={Intranet.class,Extranet.class}
Long idRepoPub,
@NotEmpty(@NotEmpty(groups={Extranet.class})
String pubSib,
@NotNull(groups={Intranet.class,Extranet.class}
PubRecord pub){
}
In a method of one of my service
public void update(Repo repot, RepoPubRecord repoPubRecord){
Set<ConstraintViolation<RepoPubRecord>> violations = validator.validate(repoPubRecord, Extranet.class);
if (!violations.isEmpty()) {
throw new ConstraintViolationException(violations);
}
....
}
I would like to manage this error globally
@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
protected ResponseEntity<Object> handleMissingServletRequestParameter(MissingServletRequestParameterException ex, HttpHeaders headers,HttpStatus status, WebRequest request) {
String error = ex.getParameterName() + " parameter is missing.";
return new ResponseEntity<Object>(new MissingServletRequestParameterException(error, ex.getParameterType()), HttpStatus.BAD_REQUEST));
}
@ExceptionHandler(ConstraintViolationException.class)
protected ResponseEntity<?> handleConstraintViolationException(ConstraintViolationException ex, HttpServletRequest request){
try {
Set<String> messages = ex.getConstraintViolations().stream().map(ConstraintViolation::getMessage).collect(Collectors.toSet());
return new ResponseEntity<>(new ConstraintViolationException(messages), HttpStatus.BAD_REQUEST);
} catch (Exception e) {
return new ResponseEntity<>(new ConstraintViolationException<>(new HashSet<String>().add(ex.getMessage())), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
I just don't understand what i'm suppoing to put in the ResponseEntity to get information of what has failed