如何使用Spring的@ExceptionHandler实现自定义错误字符串?

时间:2011-07-25 23:43:29

标签: java spring spring-mvc

在Web控制器中,我有一个@ExceptionHandler实现来处理我可以得到的某种类型的设备异常。它看起来像这样:

    @ExceptionHandler(DeviceException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
public void handleException(DeviceException ex) {
    log.error("controller caught exception " + ex.getMessage());
            return ex.getMessage();
}    

我想要实现的是在抛出DeviceException时返回Exception的消息。

在客户端我有这个jQuery代码,目前的问题是我似乎无法获得错误回调中的任何ex.getMessage()内容,这就是我需要解决的问题。

        $.ajax( {
        type: "GET",
        url: "<c:url value="/x/y/status"/>.json",
        dataType: "json",
        cache: false,
        success: function ( data ){
          // use the data
        },
        error: function(jqXHR, textStatus, errorThrown) {
            // problem : all 3 of the data below (responseText etc.) are blank when I've thrown a DeviceException

            alert('jqXHR.responseText = ', jqXHR.responseText);
            alert('textStatus = ', textStatus);
            alert('errorThrown = ', errorThrown);
        }
    } );

2 个答案:

答案 0 :(得分:1)

@ResponseStatus也有一个值字段。这可用于设置任何自定义消息。查看文档@ http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/bind/annotation/ResponseStatus.html

答案 1 :(得分:0)

带有参数和返回类型的@ExceptionHandler mechanism is very flexible用它注释的方法可以有。

您可以使用HttpServletResponse对象的某种组合或返回模型和/或视图以向AJAX调用者返回有意义的内容 - 例如,特定的响应代码,或者将某些内容写入输出流解析JavaScript等