在SpringMVC中发送状态代码和消息

时间:2013-12-05 07:55:59

标签: spring http spring-mvc

我的网络应用程序中有以下代码:

@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();

2 个答案:

答案 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);
}