Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
23 Апр 2023
2 мин
236

Ответ сервера с HTTP 400 ошибкой в Spring MVC @ResponseBody методе, возвращающем String

Часто при использовании Spring MVC для создания JSON API, разработчики сталкиваются с необходимостью обрабатывать ошибки и отправлять ответы с определенными

Часто при использовании Spring MVC для создания JSON API, разработчики сталкиваются с необходимостью обрабатывать ошибки и отправлять ответы с определенными HTTP статусами. Вернемся к примеру, где используется подход @ResponseBody, а метод возвращает тип String.

@RequestMapping(value = "/matches/{matchId}", produces = "application/json")
@ResponseBody
public String match(@PathVariable String matchId) {
    String json = matchService.getMatchJson(matchId);
    if (json == null) {
        // TODO: как ответить, например, 400 "плохой запрос"?
    }
    return json;
}

В этом примере, если json == null, разработчик хочет отправить ответ с HTTP статусом 400, что означает «плохой запрос». Но как это сделать, если возвращаемый тип метода — String?

Хотя Spring MVC предлагает такой подход, как использование ResponseEntity, который позволяет устанавливать статус ответа, в данном случае он не подходит.

return new ResponseEntity(HttpStatus.BAD_REQUEST);

Метод возвращает String, а не ResponseEntity, поэтому этот подход здесь использовать нельзя.

Однако, на помощь приходит Spring и его исключения. В Spring MVC можно определить специальные обработчики исключений с помощью аннотации @ExceptionHandler. Эти обработчики могут быть использованы для отправки ответов с определенными HTTP статусами.

@ResponseStatus(HttpStatus.BAD_REQUEST)
public class BadRequestException extends RuntimeException {
}

@RequestMapping(value = "/matches/{matchId}", produces = "application/json")
@ResponseBody
public String match(@PathVariable String matchId) {
    String json = matchService.getMatchJson(matchId);
    if (json == null) {
        throw new BadRequestException();
    }
    return json;
}

В данном примере, если json == null, выбрасывается исключение BadRequestException. Благодаря аннотации @ResponseStatus(HttpStatus.BAD_REQUEST), Spring автоматически отправит ответ с HTTP статусом 400.

Таким образом, даже если метод контроллера возвращает String, с помощью исключений Spring MVC можно управлять HTTP статусами ответов.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий