我有一个简单的WS,它是@PUT
并接受一个对象
@Path("test")
public class Test {
@PUT
@Path("{nid}"}
@Consumes("application/xml")
@Produces({"application/xml", "application/json"})
public WolResponse callWol(@PathParam("nid") WolRequest nid) {
WolResponse response = new WolResponse();
response.setResult(result);
response.setMessage(nid.getId());
return response;
}
我的客户端代码是...
WebResource wr = client.resource(myurl);
WolResponse resp = wr.accept("application/xml").put(WolResponse.class, wolRequest);
我正在尝试将
WolRequest
实例传递到@PUT
Webservice中。尝试执行此操作时,我不断收到405错误。如何通过Jersey将对象从客户端传递到服务器?我使用查询参数还是请求?
我的两个POJO(
WolRequest
和WolResponse
)都定义了XMlRootElement
标记,因此我可以生成和使用xml。 最佳答案
我认为@PathParam的用法在这里不正确。 @PathParam基本上可以是字符串(有关更多信息,请参见其javadoc)。
您可以1)使用@PathParam作为String参数,或者2)不要将WolRequest定义为@PathParam。
1)
@Path("test")
public class Test {
@PUT
@Path("{nid}"}
@Consumes("application/xml")
@Produces({"application/xml", "application/json"})
public WolResponse callWol(@PathParam("nid") String nid) {
WolResponse response = new WolResponse();
response.setResult(result);
response.setMessage(nid);
return response;
}
这将接受如下网址:“text / 12”,然后12将是String nid。看起来这不会对您尝试做的事情有所帮助。
要么
2)
@Path("test")
public class Test {
@PUT
@Consumes("application/xml")
@Produces({"application/xml", "application/json"})
public WolResponse callWol(WolRequest nid) {
WolResponse response = new WolResponse();
response.setResult(result);
response.setMessage(nid.getId());
return response;
}
您的客户代码可以像您指定的一样,只有PUT的网址是:“test”。也许您需要ID的@PathParam和“普通”参数的组合才能获取请求数据。
我希望这有帮助。