Swagger обязательный параметр возвращает 500 при отсутствии вместо 404 - PullRequest
0 голосов
/ 18 марта 2020

У меня есть конечная точка REST с параметром запроса «myParam». Это обязательный параметр, без которого любой запрос GET, направленный на эту конечную точку, считается неправильным запросом. Я использую Swagger, чтобы подчеркнуть тот факт, что этот параметр является обязательным, следующим образом:

@ApiParam(required = true) @RequestParam(value = "myParam") String myParam

Проблема заключается в том, что когда я отправляю GET на эту конечную точку через Postman, возвращается ошибка HTTP 500, говорящая о том, что обязательный параметр myParam не указан. Есть ли способ реорганизовать это так, что если параметр, помеченный Swagger как необходимый, отсутствует, ответ будет 404 вместо этого?

1 Ответ

1 голос
/ 18 марта 2020

Решением может быть создание класса и аннотирование его @ControllerAdvice. Методы этого класса отвечают за обработку определенного c исключения, переданного в качестве параметров. В вашей ошибке 500 должна быть трассировка стека исключений, например "Вызвано .. org.somepackage.SomeException ..." .

1) Вы можете создать собственный класс, содержащий сообщение и код HttpStatus:

public class ExceptionResponse {
  private HttpStatus httpStatus;
  private String errorMessage;
  //getters;setters;
}

2) Класс @ControllerAdvice с комментариями должен выглядеть следующим образом:

@ControllerAdvice
public class RestExceptionHandler {

@ExceptionHandler(value = SomeException.class)
public ResponseEntity<ExceptionResponse> handleMissingRequiredParameters(SomeException ex) {
    ExceptionResponse exceptionResponse = new ExceptionResponse();
    exceptionResponse.setHttpStatus(HttpStatus.BAD_REQUEST);
    exceptionResponse.setErrorMessage(ex.getMessage());
    return new ResponseEntity<>(exceptionResponse, exceptionResponse.getHttpStatus());
}
}

А теперь, когда выдается SomeException, фактический ответ, который вы увидите, это ExceptionResponse JSON с пользовательскими httpStatus и errorMessage.

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