JAX-RS API 故障响应到 java
JAX-RS API Fault Response into java
我正在访问 API,它返回 404 错误和故障消息。我想在我的 java 代码中使用确切的消息。我不确定如何访问它。
元素中出现正常响应
但这是以故障形式出现的,我想访问其中的消息。请建议使用哪个class。或任何示例代码片段。
以下是不同格式的示例响应。
XML 响应:
<Fault xmlns="http://abc.cu.ms/api/resource">
<Message>Service not found</Message>
</Fault>
JSON:
{"Message": "Service not found"}
原始文件:
HTTP/1.1 404 Not Found
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
X-Powered-By: ASP.NET
Date: Tue, 13 Jan 2015 09:30:38 GMT
Content-Length: 37
{"Message":"Service not found"}
无论您使用什么 JAX-RS 实现,它都应该有一个客户端 API。如果您使用 JAX-RS 2 实现,则应该有一个标准的客户端 API。如果您使用的是 JAX-RS 1 实现,那么客户端 API 将特定于该实现(并且您可能需要导入 jar 依赖项)。
对于 JAX-RS 2 实现,您可以这样做
Client client = ClientBuilder.newBuilder();
WebTarget target = client.target(url);
Response response = target.request.accept(MediaType.APPLICATION_XML).get();
Fault fault = response.readEntity(Fault.class);
String message = fault.getMessage();
你的 Fault
class 可以简单地看起来像
@XmlRootElement(name = "Fault")
public class Fault {
private String message;
@XmlElement(name = "Message")
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
对于 xml 中的命名空间,您可以简单地添加一个 package-info.java
文件 Fault
class 所在的包。它看起来像
@XmlSchema(
namespace = "http://www.example.org/package",
elementFormDefault = XmlNsForm.QUALIFIED)
package thepackage.of.your.fault.model;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
您可以阅读有关命名空间的更多信息here。
有关具体实施的更多信息,请提供有关您使用的 JAX-RS 实施的更多信息
对于 JSON,您可能需要 add/register 一个提供者,但我再次需要知道您正在使用什么实现来帮助解决这个问题。
我正在访问 API,它返回 404 错误和故障消息。我想在我的 java 代码中使用确切的消息。我不确定如何访问它。
元素中出现正常响应
但这是以故障形式出现的,我想访问其中的消息。请建议使用哪个class。或任何示例代码片段。
以下是不同格式的示例响应。
XML 响应:
<Fault xmlns="http://abc.cu.ms/api/resource">
<Message>Service not found</Message>
</Fault>
JSON:
{"Message": "Service not found"}
原始文件:
HTTP/1.1 404 Not Found
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
X-Powered-By: ASP.NET
Date: Tue, 13 Jan 2015 09:30:38 GMT
Content-Length: 37
{"Message":"Service not found"}
无论您使用什么 JAX-RS 实现,它都应该有一个客户端 API。如果您使用 JAX-RS 2 实现,则应该有一个标准的客户端 API。如果您使用的是 JAX-RS 1 实现,那么客户端 API 将特定于该实现(并且您可能需要导入 jar 依赖项)。
对于 JAX-RS 2 实现,您可以这样做
Client client = ClientBuilder.newBuilder();
WebTarget target = client.target(url);
Response response = target.request.accept(MediaType.APPLICATION_XML).get();
Fault fault = response.readEntity(Fault.class);
String message = fault.getMessage();
你的 Fault
class 可以简单地看起来像
@XmlRootElement(name = "Fault")
public class Fault {
private String message;
@XmlElement(name = "Message")
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
对于 xml 中的命名空间,您可以简单地添加一个 package-info.java
文件 Fault
class 所在的包。它看起来像
@XmlSchema(
namespace = "http://www.example.org/package",
elementFormDefault = XmlNsForm.QUALIFIED)
package thepackage.of.your.fault.model;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
您可以阅读有关命名空间的更多信息here。
有关具体实施的更多信息,请提供有关您使用的 JAX-RS 实施的更多信息
对于 JSON,您可能需要 add/register 一个提供者,但我再次需要知道您正在使用什么实现来帮助解决这个问题。