используя несколько значений HttpStatus в @ResponseStatus - PullRequest
2 голосов
/ 16 февраля 2011

Я использую аннотацию Spring @ResponseStatus в своем исключении, как

@ResponseStatus(value=HttpStatus.UNAUTHORIZED)
public class UnauthorizedException extends Exception{
}

Проблема в том, что я хочу выдать ту же ошибку для ряда значений, таких как HttpStatus.SC_SERVICE_UNAVAILABLE и т. Д.

Есть ли способ использовать несколько значений в @ResponseStatus? Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 16 февраля 2011

Нет. Вы не можете иметь несколько кодов http статуса. Проверьте http spec

Если вы действительно хотите установить разные коды состояния в разных сценариях (но только один код состояния на ответ), удалите аннотацию и добавьте ее с помощью кода:

public X method(HttpServletResponse response) {
    if (..) {
         response.setStatus(..);
    } else {
         response.setStatus(..);
    }
}
2 голосов
/ 16 февраля 2011

Единственный обходной путь, который приходит на ум, - это не использование аннотации @ResponseStatus. Подумайте о том, чтобы написать собственный код обработки ошибок в контроллере, который перехватывает соответствующее исключение, устанавливает код ошибки так, как вы предпочитаете для этого класса. Если он находится в нескольких контроллерах, подумайте о том, чтобы написать перехватчик или использовать AOP.

1 голос
/ 16 февраля 2011

Вы можете установить код ответа в классе HttpServletResponse с помощью метода .setStatus(), который вы можете получить из applicationContext.

0 голосов
/ 01 апреля 2011

Почему бы просто не создать несколько классов исключений и выбросить соответствующий класс?

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