Jersey UniformInterfaceException尝试代理REST POST服务

ast*_*eri 4 java rest post jersey firefox-addon

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

我使用Firefox附加HTTPRequester传入@FormParams并确保我使用适当的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);
Run Code Online (Sandbox Code Playgroud)

实际服务

@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;
}
Run Code Online (Sandbox Code Playgroud)

例外

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)
Run Code Online (Sandbox Code Playgroud)

Rei*_*ica 9

UniformInterfaceException只是一个包含较差名称的全部异常(它的名称是因为它是一个提供统一接口的异常,无论错误如何).它基本上是泽西岛的任何东西抛出的IOException.实际错误是406 Unacceptable:

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

在这里你说你接受MediaType.APPLICATION_FORM_URLENCODED:

String returnValue = service.accept(MediaType.APPLICATION_FORM_URLENCODED).post(String.class, form);
Run Code Online (Sandbox Code Playgroud)

但是你的服务会产生MediaType.APPLICATION_XML:

@Produces(MediaType.APPLICATION_XML)
Run Code Online (Sandbox Code Playgroud)

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

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

String returnValue = service.type(MediaType.APPLICATION_FORM_URLENCODED).post(String.class, form);
Run Code Online (Sandbox Code Playgroud)