0

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

目前我正在做

response.setHeader("Content-Type","application/json"); response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "{\"error\":\"缺少身份验证参数\"}");

响应正文如下。

JBoss Web/2.1.3.GA - 错误报告

HTTP 状态 401 - {"error":"Missing Authentication Parameters"}

类型状态报告

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

描述此请求需要 HTTP 身份验证 ({"error":"Missing Authentication Parameters"})。

JBoss Web/2.1.3.GA

我只需要 JSON 字符串作为响应。请帮我。

4

1 回答 1

1

您可能应该为此使用 spring-security 。如果您想手动执行此操作,则sendError在响应上使用的替代方法是使用 spring MVC 的@ExceptionHandler以及内容协商来返回 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
        );
    }
}

*使用 getter/setter 来取悦 java 约定之神

于 2012-04-14T10:39:03.653 回答