@JsonPropert выдавать исключение со всеми пропущенными обязательными полями - PullRequest
0 голосов
/ 11 декабря 2018

Идея состоит в том, чтобы вернуть все пропущенные поля в ArrayList внутри ErrorResponseDto.В настоящее время происходит сбой при первом появлении пропущенного поля и выдается одно исключениеНапример: "JSON parse error: Missing required creator property 'var1' (index 4)".Как сделать так, чтобы исключение включало все пропущенные поля?

Иерархия исключений: org.springframework.http.converter.HttpMessageNotReadableException com.fasterxml.jackson.databind.exc.MismatchedInputException

Контроллер:

@Slf4j
@RestController
@RequestMapping(consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public class ServiceController {
@RequestMapping(method = RequestMethod.POST, value = "/action")
    public ResponseEntity verify(@RequestBody @Valid RequestDto RequestDto) {
}
}

DTO:

@Builder
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@AllArgsConstructor
public class RequestDto {
    @JsonProperty(value = "var1", required = true)
    private String var1;

    @JsonProperty(value = "var2", required = true)
    private String var2;
}

GenericExceptionHandler:

@Slf4j
@ControllerAdvice
@Component
public class GenericExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorResponseDto> handleAllExceptions(Exception ex, WebRequest request) {
List<ErrorResponseDto.ErrorResponse> errors = new ArrayList<>();
        errors.add(ErrorResponseDto.ErrorResponse.builder()
                .type(responseStatusCode.toString())
                .details(ex.getMessage())
                .build());

        ErrorResponseDto errorDetails = ErrorResponseDto.builder()
                .errors(errors)
                .build();

        return new ResponseEntity<>(errorDetails, responseStatusCode);
}
}

1 Ответ

0 голосов
/ 18 декабря 2018

Похоже, что пользовательская реализация ConstraintValidator добьется цели. Примеры

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...