我有一个简单的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(WolRequestWolResponse)都定义了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和“普通”参数的组合才能获取请求数据。

我希望这有帮助。

10-08 01:21