我的网络应用程序中有以下代码:
@ExceptionHandler(InstanceNotFoundException.class)
@ResponseStatus(HttpStatus.NO_CONTENT)
public ModelAndView instanceNotFoundException(InstanceNotFoundException e) {
return returnErrorPage(message, e);
}
是否可以在响应中附加状态消息?我需要为我的错误添加一些额外的语义,比如在我发布的片段的情况下,我想追加哪个类是未找到实例的元素。
这甚至可能吗?
编辑:我试过这个:@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();
答案 0 :(得分:1)
原来我需要使用以下参数激活Tomcat上的自定义消息:
-Dorg.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER=true
答案 1 :(得分:1)
消息可以在正文中而不是在标题中。与成功的方法类似,设置要返回的响应(text,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);
}