2015-12-03 1 views
1

У меня есть класс исключения, как следуетSpring REST @ResponseStatus с пользовательским классом исключений не меняет код состояния возврата

@ResponseStatus(value=HttpStatus.UNPROCESSABLE_ENTITY, reason="Unprocessable Entity") // 422 
public class UnprocessableEntityException extends RuntimeException { 
} 

Теперь статус не возвращается как 422, если я не пишу конкретный обработчик в классе контроллера как:

@ExceptionHandler(UnprocessableEntityException.class) 
    @ResponseStatus(HttpStatus.UNPROCESSABLE_ENTITY) 
    public String handleException(Exception ex) { 
... 
} 

Как я понимаю, что не нужно @ExceptionHandler в первую очередь, не уверен, что мне не хватает.

ответ

0

Throwing a @ResponseStatus аннотированное исключение из метода контроллера должно быть достаточным для того, чтобы каркас мог написать код состояния HTTP - нет @ExceptionHandler.

Следующая напишут 422 Статус на ударять корень WebAPP, как и ожидалось:

@Controller 
public class ExceptionController { 

    @RequestMapping("/") 
    public void action() { 
     throw new ActionException(); 
    } 

    @ResponseStatus(value = HttpStatus.UNPROCESSABLE_ENTITY, reason = "nope") 
    public static class ActionException extends RuntimeException {} 
} 

Это работает любезность ResponseStatusExceptionResolver, который создается Spring MVC по умолчанию - если он не работает для вас, я думаю, является то, что это исключение по умолчанию распознаватель была удалено (с помощью, например, перекрывая WebMvcConfigurationSupport.configureHandlerExceptionResolvers или иным образом настройки вашего контексте в HandlerExceptionResolver сек, так что ResponseStatusExceptionResolver является сфабрикованными.)

0

исключения, брошенное не должны быть обработаны кодом или другими резольверами исключения для экзамена например, он не должен обрабатываться @ExceptionHandler, поскольку это будет отменять код состояния, указанный классом исключения @ResponseStatus.

Смежные вопросы