Подтвердить что ты не робот

Spring Boot Rest Controller как вернуть разные коды состояния HTTP?

Я использую Spring Boot для простого REST API и хотел бы вернуть правильный код состояния HTTP, если что-то не удается.

@RequestMapping(value="/rawdata/", method = RequestMethod.PUT)
@ResponseBody
@ResponseStatus( HttpStatus.OK )
public RestModel create(@RequestBody String data) {
    // code ommitted..
    // how do i return a correct status code if something fails?
}

Будучи новичком в Spring и Spring Boot, основной вопрос заключается в том, как я могу вернуть разные коды состояния, когда что-то в порядке или не удается?

4b9b3361

Ответ 1

Есть несколько вариантов, которые вы можете использовать. Весьма хороший способ - использовать исключения и класс для обработки под названием @ControllerAdvice:

@ControllerAdvice
class GlobalControllerExceptionHandler {
    @ResponseStatus(HttpStatus.CONFLICT)  // 409
    @ExceptionHandler(DataIntegrityViolationException.class)
    public void handleConflict() {
        // Nothing to do
    }
}

Также вы можете передать HttpServletResponse в метод контроллера и просто установить код ответа:

public RestModel create(@RequestBody String data, HttpServletResponse response) {
    // code ommitted..
    response.setStatus(HttpServletResponse.SC_ACCEPTED);
}

Для получения более подробной информации обратитесь к большому сообщению в блоге: http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc

Примечание: в Spring Загрузка с использованием аннотации @ResponseBody избыточна - она ​​включена в @RestController