我正在使用Jersey RESTful网络服务。我写了如下的客户端,但它抛出了我在标题中提到的异常。
public class MyRestClient {
public static void main(String[] args) {
Client client = Client.create();
WebResource resource = client.resource("http://localhost:8080/myapp/rest/a/update/123");
Sample b1 = new Sample("debris");
ClientResponse response = resource.type(MediaType.APPLICATION_XML).put(ClientResponse.class, b1);
}
}
有人告诉使用 @XmlRootElement 注释Sample类。但是我不能这样做,因为Sample是由第三方生成的。有什么帮助吗?
答案 0 :(得分:1)
如果没有看到您的REST服务类,这有点难以回答,但我猜您正在尝试将您的数据用作服务中的Sample对象,如下所示:
@PUT
public Response updateSample(Sample sample) {
...
但是这依赖于Jersey能够自动将您的XML数据编组到Sample对象中,正如您所指出的那样,需要在Sample类上使用JAXB注释,并且由于缺少这些注释,您将收到您描述的错误。
相反,您可以在服务中将其作为String使用,如下所示:
@PUT
public Response updateSample(String sampleStr) {
...
但现在您负责将sampleStr数据解析为xml并将其转换为Sample对象(这不一定是坏事)。但是,由于Sample类没有注释XML,因此Jersey甚至无法将其转换为XML以供客户端发送。
有关使用Jersey REST服务来回传输数据的不同方法的更多信息,请参阅此文章:http://usna86-techbits.blogspot.com/2013/08/restful-java-web-service-marshalling.html
如果您将数据作为JSON传递,则可以更轻松地在服务器上手动处理它。查看该文章底部的JUnit测试类,了解如何执行此操作。
如果您需要更多帮助,请提供您的服务等级。