Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从ContainerRequestFilter使用JSON中止请求?_Java_Json_Jakarta Ee_Jersey_Jax Rs - Fatal编程技术网

Java 如何从ContainerRequestFilter使用JSON中止请求?

Java 如何从ContainerRequestFilter使用JSON中止请求?,java,json,jakarta-ee,jersey,jax-rs,Java,Json,Jakarta Ee,Jersey,Jax Rs,我想在出现错误时中止请求并返回JSON。但是下面的代码只是返回一个字符串,表示意外的“U”,这不是我的消息 如何使用JSON响应使其中止 requestContext.abortWith( Response.status( Response.Status.UNAUTHORIZED ).entity( e.getMessage() ).type( MediaType.APPLICATION_JSON ).build() ); 看起来e.ge

我想在出现错误时中止请求并返回JSON。但是下面的代码只是返回一个字符串,表示意外的“U”,这不是我的消息

如何使用JSON响应使其中止

requestContext.abortWith(
    Response.status( Response.Status.UNAUTHORIZED ).entity(
        e.getMessage()
    ).type(
        MediaType.APPLICATION_JSON
    ).build()
);
看起来e.getMessage不会为您提供有效的JSON

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

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

requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).entity(message)
                                 .type(MediaType.APPLICATION_JSON).build());
或者,您可以将消息包装到bean中:

public class ApiError {

    private String message;

    // Getters and setters
}
然后将其作为响应实体返回:

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

requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).entity(error)
                                 .type(MediaType.APPLICATION_JSON).build());
看起来e.getMessage不会为您提供有效的JSON

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

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

requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).entity(message)
                                 .type(MediaType.APPLICATION_JSON).build());
或者,您可以将消息包装到bean中:

public class ApiError {

    private String message;

    // Getters and setters
}
然后将其作为响应实体返回:

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

requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).entity(error)
                                 .type(MediaType.APPLICATION_JSON).build());

注意:对于Jersey 1.x,您通过抛出javax.ws.rs.WebApplicationExceptionjavax.ws.rs.core.Response中止。注意:对于Jersey 1.x,您通过抛出javax.ws.rs.WebApplicationExceptionjavax.ws.rs.core.Response中止。