如何中止来自 ContainerRequestFilter 的 JSON 请求?

Don*_*mmy 1 java json jax-rs jersey jakarta-ee

我想在出现错误时中止请求并返回 JSON。但下面的代码只是返回一个字符串说"Unexpected 'U'"(这不是我的信息)

我如何让它通过 JSON 响应中止?

requestContext.abortWith(
    Response.status( Response.Status.UNAUTHORIZED ).entity(
        e.getMessage()
    ).type(
        MediaType.APPLICATION_JSON
    ).build()
);
Run Code Online (Sandbox Code Playgroud)

cas*_*lin 6

看起来e.getMessage()不会给你一个有效的 JSON。


一旦有效的 JSON 可以是带引号的字符串,您就可以简单地在异常消息中添加引号:

String message = "\"" + e.getMessage() + "\"";

requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).entity(message)
                                 .type(MediaType.APPLICATION_JSON).build());
Run Code Online (Sandbox Code Playgroud)

或者,您可以将消息包装到 bean 中:

public class ApiError {

    private String message;

    // Getters and setters
}
Run Code Online (Sandbox Code Playgroud)

然后将其作为响应实体返回:

ApiError error = new ApiError();
error.setMessage(e.getMessage());

requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).entity(error)
                                 .type(MediaType.APPLICATION_JSON).build());
Run Code Online (Sandbox Code Playgroud)