Spring拦截器的json格式的错误响应

时间:2012-04-14 07:24:05

标签: spring-mvc jboss iinterceptor

我正在编写基于REST的Web服务。我需要以JSON格式返回所有响应。我有一个拦截器来验证我的身份验证参数。在身份验证失败的情况下,我必须以JSON格式返回错误响应。

目前我在做

response.setHeader( “内容类型”, “应用/ JSON”); response.sendError(HttpServletResponse.SC_UNAUTHORIZED,“{\”error \“:\”缺少身份验证参数\“}”);

响应机构如下:

JBoss Web / 2.1.3.GA - 错误报告

HTTP状态401 - {“错误”:“缺少身份验证参数”}

类型状态报告

消息 {“错误”:“缺少身份验证参数”}

说明此请求需要HTTP身份验证( {“error”:“缺少身份验证参数”})。

JBoss Web / 2.1.3.GA

我只需要响应中的JSON字符串。请帮帮我。

1 个答案:

答案 0 :(得分:1)

你可能应该使用spring-security。如果您想手动执行此操作,则在响应中使用sendError的替代方法是使用spring MVC的@ExceptionHandlercontent negotiation来返回JSON。

首先定义错误类*:

public class Error {
    public message;
    public exception;
    public Error(String message, Exception ex) {
        this.message = message;
        this.exception = ex;
    }
}

例外:

public class NotAuthenticatedException extends Exception {
    // ...
}

然后在您的控制器中,您在适当的时间抛出异常,使用@ExceptionHandler捕获它并返回包含ResponseEntity实例的Error和相应的错误代码。

@Controller
public class SimpleController {
    @RequestMapping(...)
    public String aMethod() {
        // ...
        throw new NotAuthenticatedException("Missing Authentication Parameters");
    }

    @ExceptionHandler(NotAuthenticatedException.class)
    public ResponseEntity<Error> handleNotAuthenticatedException(
            NotAuthenticatedException ex, 
            HttpServletRequest request) {
        return new ResponseEntity<Error>(
            new Error(ex.getMessage(), ex), 
            HttpStatus.UNAUTHORIZED
        );
    }
}

*使用getters / setters来取悦java惯例之神

相关问题