2013-12-05 4 views
0

У меня есть следующий код в моем веб-приложение:Отправить код состояния и сообщение в SpringMVC

@ExceptionHandler(InstanceNotFoundException.class) 
    @ResponseStatus(HttpStatus.NO_CONTENT) 
    public ModelAndView instanceNotFoundException(InstanceNotFoundException e) { 
     return returnErrorPage(message, e); 
    } 

Можно также добавить сообщение о состоянии в ответ? Мне нужно добавить некоторые дополнительные семантики для моих ошибок, например, в случае опубликованного фрагмента, который я хотел бы добавить, какой класс был элементом, экземпляр которого не был найден.

Возможно ли это?

EDIT: Я попытался это:

@ResponseStatus(value=HttpStatus.NO_CONTENT, reason="My message") 

Но тогда, когда я пытаюсь получить это сообщение в клиенте, он не установлен.

 URL u = new URL (url); 
     HttpURLConnection huc = (HttpURLConnection) u.openConnection(); 
     huc.setRequestMethod("GET"); 
     HttpURLConnection.setFollowRedirects(true); 
     huc.connect(); 
     final int code = huc.getResponseCode(); 
     String message = huc.getResponseMessage(); 

ответ

1

Оказывается, мне нужно, чтобы активировать пользовательские сообщения на сервере Tomcat с помощью этого параметра:

-Dorg.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER=true 
+0

Как вы установили этот параметр со встроенным tomcat весной? – rakesh

1

Сообщение может быть в теле, а не в заголовке. Подобно успешному методу, установите ответ (текст, json, xml ..), который будет возвращен, но установите значение http в значение ошибки. Я нашел это более полезным, чем пользовательское сообщение в заголовке. В следующем примере показан ответ с настраиваемым заголовком и сообщением в теле. Образец ModelAndView, который переходит на другую страницу, также будет концептуально подобен.

@ExceptionHandler(InstanceNotFoundException.class) 
public ResponseEntity<String> handle() { 
    HttpHeaders responseHeaders = new HttpHeaders(); 
    responseHeaders.set("ACustomHttpHeader", "The custom value"); 
    return new ResponseEntity<String>("the error message", responseHeaders, HttpStatus.INTERNAL_SERVER_ERROR); 
} 
+0

Проблема заключается в том, что мне нужно знать, что вызвало ошибку, фактически не получив тело ответа. – MichelReap

+0

Несомненно, как показано выше, вы можете просто добавить новый заголовок в ответ, а не тело ответа. Будет работать последовательно на всех серверах приложений и не менять поведение по умолчанию. – vijay

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