Jersey UniformInterfaceException尝试代理REST POST服务

当我尝试执行以这种方式构造的代码时,我一直收到406 HTTP响应。 我已经尝试过多次重构代码和输入,但是我仍然收到这个错误,而且我已经达到了我甚至不知道要调试什么的程度。 exception似乎表明post()方法没有以所需的格式提供@FormParam ,但是你可以看到.accept(MediaType.APPLICATION_FORM_URLENCODED)@Consumes(MediaType.APPLICATION_FORM_URLENCODED)确实匹配了。

我正在使用Firefox附加的HTTPRequester来传递@FormParam ,并确保我使用适当的Content-Type( application/x-www-form-urlencoded )传递它们。 我已经没有东西要检查了。 有没有人有任何想法?


代理服务

 Client client = Client.create(); WebResource service = client.resource(myURL); Form form = new Form(); form.add("value1", value1); form.add("value2", value2); form.add("valueN", valueN); String returnValue = service.accept(MediaType.APPLICATION_FORM_URLENCODED).post(String.class, form); 

实际服务

 @POST @Produces(MediaType.APPLICATION_XML) @Consumes(MediaType.APPLICATION_FORM_URLENCODED) @Path("/theService") public String theService( @FormParam("value1") String value1, @FormParam("value2") String value2, @FormParam("valueN") String valueN) { String returnValue = null; /* * Do Stuff */ return returnValue; } 

例外

 com.sun.jersey.api.client.UniformInterfaceException: POST http://theURL/theService returned a response status of 406 at com.sun.jersey.api.client.WebResource.handle(WebResource.java:563) at com.sun.jersey.api.client.WebResource.access$300(WebResource.java:69) at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:499) 

UniformInterfaceException只是一个包含不良名称的全能exception(它的名字是因为它是一个提供统一接口的exception,无论错误如何)。 它基本上是泽西岛的任何东西抛出的IOException。 实际错误是406 Unacceptable :

请求的资源只能根据请求中发送的Accept标头生成不可接受的内容。

在这里,您说您接受MediaType.APPLICATION_FORM_URLENCODED

 String returnValue = service.accept(MediaType.APPLICATION_FORM_URLENCODED).post(String.class, form); 

但是您的服务会生成MediaType.APPLICATION_XML

 @Produces(MediaType.APPLICATION_XML) 

由于您的服务器无法生成客户端表示会接受的任何内容,因此会返回406错误。

最有可能的是,你的意思是设置WebResource.type ,而不是accept

 String returnValue = service.type(MediaType.APPLICATION_FORM_URLENCODED).post(String.class, form);