2014-10-23 7 views
3

Почему мое веб-приложение возвращает 200, когда вызывается исключение? Несмотря на то, что я получаю правильное тело ответа за ошибку.Spring MVC возвращает неправильный код состояния Http

Ответ образец будет:

Status Code = 200 
Body: { "error": "User does not exist" } 

Мой код выглядит следующим образом:

@RequestMapping(method = RequestMethod.PUT, value = "/{userId}") 
@ResponseStatus(HttpStatus.OK) 
public void updateUser(@PathVariable("userId") String userId, 
     @RequestBody(required = false) Map<String, String> fields) 
     throws UserNotFoundException { 
    // code that leads to the exception being thrown 
} 

@ExceptionHandler(UserNotFoundException.class) 
@ResponseBody 
@ResponseStatus(HttpStatus.NOT_FOUND) 
public ErrorDto userNotFound() { 
    return new ErrorDto("User does not exist"); 
} 

ответ

1

Так что проблема не в контроллере, а в моем SimpleUrlAuthenticationSuccessHandler. Когда я отправлял запросы моему контроллеру, я использовал RequestDispatcher.include() вместо RequestDispatcher.dispatcher(), потому что я думал, что это решение предыдущей проблемы, с которой я столкнулся.

0

Вы должны быть в состоянии сделать это, добавив HttpServletResponse в качестве аргумента метода и установки кода ответа там:

@ExceptionHandler(UserNotFoundException.class) 
@ResponseBody 
public ErrorDto userNotFound(HttpServletResponse response) { 
    response.setStatus(HttpServletResponse.SC_NOT_FOUND); 
    return new ErrorDto("User does not exist"); 
} 
+0

Это все еще выдало код состояния 200 – Hank

+0

Странный - я использовал его вчера в своем собственном проекте, и он правильно установил статус. –