Zwracanie error kodu jako ResponseEntity po walidacji DTO w REST API

0

Korzystając z poradnika https://www.leveluplunch.com/java/tutorials/017-validate-spring-rest-webservice-request/ chcę dokonać walidacji formularza za pomocą java bez przeładowywania strony. Robię to w REST API.
Mój kontroler:

@PutMapping(value = "/changeEmail", consumes = MediaType.APPLICATION_JSON_VALUE)
    public HttpEntity<ChangeEmailDTO> showChangeEMail(
            @RequestBody @Valid ChangeEmailDTO changeEmailDTO,
            BindingResult result
    ) {
        System.out.println("Email: " + changeEmailDTO.getEmail());

        if(result.hasErrors()) {
            System.out.println("Error: " + changeEmailDTO.getEmail());
            return ResponseEntity.badRequest().body(changeEmailDTO);
        }

        System.out.println("Success: " + changeEmailDTO.getEmail());
        return ResponseEntity.ok(changeEmailDTO);
    }

przyjmuje adres email, waliduje w adnotacjach

    @NotEmpty
    @Getter @Setter private String email;

Według podanego wyżej poradnika, podobno powinno zwrócić error code w postaci json. Natomiast jedyny efekt jaki otrzymuje to https://zapodaj.net/81a6db4635168.png.html
Czyli zwraca mi sam obiekt, a nie tak jak np. w poradniku

{"timestamp":1417379464584,"status":400,"error":"Bad Request","exception":"org.springframework.web.bind.MethodArgumentNotValidException","message":"Validation failed for argument at index 0 in method: public org.springframework.http.ResponseEntity<demo.AgencyResource> demo.AgencyController.saveAgency(demo.AgencyResource), with 2 error(s): [Field error in object 'agencyResource' on field 'name': rejected value [null]; codes [NotNull.agencyResource.name,NotNull.name,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [agencyResource.name,name]; arguments []; default message [name]]; default message [may not be null]] [Field error in object 'agencyResource' on field 'id': rejected value [50]; codes [Max.agencyResource.id,Max.id,Max.java.lang.Integer,Max]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [agencyResource.id,id]; arguments []; default message [id],20]; default message [must be less than or equal to 20]] ","path":"/agencies"}

W jaki sposób zwrócić takie dane?

0

A co by się stało, jakbyś wyrzucił BindingResult result i if(result.hasErrors()) { ?

0

Niemożliwe, że zwraca to samo. Jeżeli masz @Valid bez BindingResult to dostaniesz Exception i błąd http. Oni muszą robić jakieś łapanie tych Exception, coś jak http://www.baeldung.com/global-error-handler-in-a-spring-rest-api

Może spring boot robi jakieś cuda. Trudno coś powiedzieć, nie widząc całego kodu.

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