Идея состоит в том, чтобы вернуть все пропущенные поля в 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);
}
}