Spring boot MethodArgumentNotValidException po co używany jest getBindingResult()

0

Dlaczego MethodArgumentNotValidException class jest wywoływany getBindingResult() ? czy się rózni to od użycia po prostu metody np.getAllErrors()

 @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<Object> handleValidationExceptions(
            MethodArgumentNotValidException ex) {
        Map<String, Object> errors = new HashMap<>();

        errors.put("test name", ex.getBindingResult().getFieldErrors("name"));
        errors.put("test name", ex.getFieldErrors("name"));

        ex.getBindingResult().getAllErrors().forEach((error) -> {
           ....
        });
        return new ResponseEntity(errors, HttpStatus.BAD_REQUEST);
    }

i czym się różni to
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/messaging/handler/annotation/support/MethodArgumentNotValidException.html
od tego
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/MethodArgumentNotValidException.html

1

Po kolei:

  1. BindingResult zwracany przez getBindingResult() zawiera dużo więcej informacji niż sama informacja o błędzie: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/validation/BindingResult.html . Pewnie czasem takie coś jest dużo bardziej użyteczne. Co więcej, w momencie budowania obiektu BindingResult można "na bieżąco" dodawać do niego błędy - i podejrzewam, że to właśnie jest

  2. Klasa org.springframework.messaging.handler.annotation.support.MethodArgumentNotValidException nie zawiera metody getBindingResult() więc z automatu nie można jej użyć.

  3. Klasy org.springframework.messaging.handler.annotation.support.MethodArgumentNotValidException (1) i org.springframework.web.bind.MethodArgumentNotValidException (2) to dwie różne klasy. W dokumentacji widać, że przeznaczenie jest nieco inne:
    #1: Exception to be thrown when a method argument fails validation perhaps as a result of @Valid style validation, or perhaps because it is required.
    #2: Exception to be thrown when validation on an argument annotated with @Valid fails.

Rozumiem to tak: #1 jest bardziej ogólne - tj. gdy coś jest nie tak z argumentem metody. #2 jest rzucane tylko i wyłącznie gdy walidacja nie przejdzie. Tak, zachodzą na siebie bo #1 to taki #2 + coś jeszcze.

0

ale MethodArgumentNotValidException nie potrzbuje getBindingResult, bo ma wszystkie metody z bindingResult
dostępne np. (zmienna ex === MethodArgumentNotValidException) ex.addError()
mówię o org.springframework.web.bind
bo ta klasa rozszerza BindException a BindException implementuje BindingResult
Ah te klasy. ;-;

tak pisze:
public class BindException extends Exception implements BindingResult

1 użytkowników online, w tym zalogowanych: 0, gości: 1