gpt4 book ai didi

java - Jersey UniformInterfaceException 试图代理到 REST POST 服务

转载 作者:搜寻专家 更新时间:2023-11-01 01:36:17 25 4
gpt4 key购买 nike

当我尝试执行以这种方式构造的代码时,我不断收到 406 HTTP 响应。我已经多次尝试重组代码和输入,但我仍然收到此错误,而且我已经到了我什至不知道要调试什么的地步。该异常似乎表明 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只是一个名称不佳的包罗万象的异常(它被命名为 this 是因为它是一个提供统一接口(interface)的异常,无论错误如何)。它基本上是 Jersey 中任何东西抛出的 IOException。实际错误是 406 Unacceptable :

The requested resource is only capable of generating content not acceptable according to the Accept headers sent in the request.

这里是说您接受 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 ,而不是接受:

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

关于java - Jersey UniformInterfaceException 试图代理到 REST POST 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12502233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com