2017-04-12 42 views
0

我在這裏難住。我正在開發一個測試,將PNG文件上傳到REST服務,並繼續以406 Not Acceptable作爲響應。上傳PNG文件結果狀態406不可接受

我用的球衣束1.19.3

這裏是要求:

Apr 12, 2017 12:20:17 PM com.sun.jersey.api.client.filter.LoggingFilter log 
INFO: 1 * Client out-bound request 
1 > POST http://localhost:7001/api/1/payments/XT491926022464/attachments 
1 > Accept: application/xml 
1 > Content-Type: multipart/form-data; boundary=---------------------------1492014017228 
1 > Api-Key: 2222 
1 > Authorization: Bearer 1152921504606857464 
-----------------------------1492014017228 
Content-Type: text/plain 
Content-Disposition: form-data; name="requestId" 

1234 
-----------------------------1492014017228 
Content-Type: text/plain 
Content-Disposition: form-data; name="file" 

BankCustomerAttachmentTestImage.PNG 
-----------------------------1492014017228 
Content-Type: text/plain 
Content-Disposition: form-data; name="description" 

TEST 
-----------------------------1492014017228 
Content-Type: application/octet-stream 
Content-Disposition: form-data; filename="junit8251833935221639216.tmp"; name="file" 

... 

這是響應:

Apr 12, 2017 12:20:17 PM com.sun.jersey.api.client.filter.LoggingFilter log 
INFO: 1 * Client in-bound response 
1 < 406 
1 < Access-Control-Allow-Headers: Content-Type 
1 < Access-Control-Allow-Origin: * 
1 < Date: Wed, 12 Apr 2017 16:20:17 GMT 
1 < Content-Length: 14 
1 < Access-Control-Allow-Methods: GET, POST, DELETE, PUT 
1 < Content-Type: text/html; charset=UTF-8 
1 < Connection: close 
1 < X-Powered-By: Servlet/3.0 JSP/2.2 
1 < 
Not Acceptable 

這裏是代碼...什麼我做錯了嗎?

DefaultClientConfig config = new DefaultClientConfig(); 
    Client restClient = Client.create(config); 
    restClient.addFilter(new LoggingFilter()); 

    WebResource restWebResource = restClient.resource("http://..."); 
    WebResource.Builder webResourceBuilder = restWebResource.accept(MediaType.APPLICATION_XML); 

webResourceBuilder.type(MediaType.MULTIPART_FORM_DATA); 
webResourceBuilder.header(RESTActor.HEADER_API_KEY, "1234"); 
webResourceBuilder.header(HttpHeaders.AUTHORIZATION, "Bearer " + "1152921504606857464"); 

FileDataBodyPart fileDataBodyPart = new FileDataBodyPart("file", fileObject, MediaType.APPLICATION_OCTET_STREAM_TYPE); 

    fileDataBodyPart.setContentDisposition(
    FormDataContentDisposition.name("file").fileName(fileObject.getName()).build()); 

    FormDataMultiPart multiPartForm = new FormDataMultiPart(); 
    multiPartForm.field("requestId", "1234"); 
    multiPartForm.field("file", "BankCustomerAttachmentTestImage.PNG"); 
    multiPartForm.field("description", "TEST"); 

    multiPartForm.bodyPart(fileDataBodyPart); 
    multiPartForm.setMediaType(MULTIPART_FORM_DATA_TYPE); 

    final String boundary = "---------------------------" + System.currentTimeMillis(); 

    ClientResponse currentRestClientResponse = 
webResourceBuilder.type(MediaType.MULTIPART_FORM_DATA + "; boundary=" + boundary).post(ClientResponse.class, multiPartForm); 
+1

服務器應該返回XML嗎? –

回答

1

在你的要求,你表明客戶機只接受應用程序/ XML內容類型:

1 > Accept: application/xml 

但是服務器不能夠返回此內容類型,那就是406點不接受錯誤的手段。 客戶必須接受的內容類型由服務器返回的,那就是:

1 < Content-Type: text/html; charset=UTF-8 

要做到這一點,在下面的行改變的MediaType到MediaType.TEXT_HTML:

WebResource.Builder webResourceBuilder = restWebResource.accept(MediaType.TEXT_HTML); 

然後檢查真實的服務器響應可能會發現服務器端存在另一個問題,例如,它會響應HTTP 500狀態碼,一旦你解決它,你將需要調整接受的媒體類型爲一些特定的。

+0

謝謝我得到它使用APPLICATION_JSON返回類型 – Gaspar

+0

我已更新答案 – Alexey

+0

以下工作: WebResource.Builder webResourceBuilder = restWebResource.accept(MediaType.APPLICATION_JSON);使用 WebResource.Builder webResourceBuilder = restWebResource.accept(MediaType.TEXT_HTML);獲得406 – Gaspar