gpt4 book ai didi

java - 响应中的 JAX/Jersey 自定义错误代码

转载 作者:IT老高 更新时间:2023-10-28 20:32:58 27 4
gpt4 key购买 nike

在 Jersey ,我们如何“替换”与已知状态代码相关的状态字符串?

例如

return Response.status(401).build();

生成包含以下内容的 HTTP 响应:

HTTP/1.1 401 Unauthorized

我(不是我,而是客户端应用程序)希望看到响应为:

HTTP/1.1 401 Authorization Required

我尝试了以下方法但徒劳无功:

1) 这只是在 HTTP 响应的正文中添加字符串

return Response.status(401).entity("Authorization Required").build();

2) 同样的结果:

ResponseBuilder rb = Response.status(401);
rb = rb.tag("Authorization Required");
return rb.build();

感谢您的帮助!

-spd

最佳答案

要在 Jersey 执行此操作,您需要使用 WebApplicationException 类的概念。一种方法是简单地扩展此类和所有一种方法来设置返回的错误文本。在您的情况下,这将是:

import javax.ws.rs.*;
import javax.ws.rs.core.*;
import javax.ws.rs.core.Response.*;


public class UnauthorizedException extends WebApplicationException {

/**
* Create a HTTP 401 (Unauthorized) exception.
*/
public UnauthorizedException() {
super(Response.status(Status.UNAUTHORIZED).build());
}

/**
* Create a HTTP 404 (Not Found) exception.
* @param message the String that is the entity of the 404 response.
*/
public UnauthorizedException(String message) {
super(Response.status(Status.UNAUTHORIZED).entity(message).type("text/plain").build());
}

}

现在,在实现 rest 服务的代码中,您只需抛出这种类型的新异常,在构造函数中传递文本值,例如

throw new UnauthorizedException("Authorization Required");

这可以为您的每个网络异常创建一个这样的类并以类似的方式抛出。

这在 Jersey 用户指南中也有解释 - 尽管代码实际上略有错误:

https://jersey.github.io/nonav/documentation/latest/user-guide.html/#d4e435

关于java - 响应中的 JAX/Jersey 自定义错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2022007/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com