JAX-RS API故障响应到java

时间:2015-01-13 09:37:08

标签: java api rest jax-rs

我正在访问一个API,它返回404错误并显示一条错误消息。我想在我的java代码中使用确切的消息。我不知道如何访问它。

正常响应来自元素

但这是以Fault的形式出现的,我想访问其中的消息。请建议使用哪个类。或任何示例代码片段。

以下是不同格式的示例回复。

XML响应:

<Fault xmlns="http://abc.cu.ms/api/resource">
   <Message>Service not found</Message>
</Fault>

JSON:

{"Message": "Service not found"}

RAW:

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"}

1 个答案:

答案 0 :(得分:0)

无论您使用的是哪种JAX-RS实现,它都应该有一个客户端API。如果您使用JAX-RS 2实现,则应该有一个标准的客户端API。如果您使用的是JAX-RS 1实现,那么Client 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课程可以简单地看起来像

@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文件。它看起来像

@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,您可能需要添加/注册提供程序,但我需要知道您正在使用哪种实现来帮助它。