[英]Jersey UniformInterfaceException trying to proxy to REST POST service
當我嘗試執行以這種方式構造的代碼時,我一直收到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只是一個包含較差名稱的全部異常(它的名稱是因為它是一個提供統一接口的異常,無論錯誤如何)。 它基本上是澤西島的任何東西拋出的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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.