Jersey客户端异常:找不到消息正文编写器

aaa*_*aaa 7 rest web-services jersey

我正在使用Jersey客户端来访问PHP Web服务以获取图像上载功能.我收到以下异常:

Caused by: com.sun.jersey.api.client.ClientHandlerException: 
A message body writer for Java type, class 
com.sun.jersey.multipart.FormDataMultiPart, and MIME media type, 
multipart/form-data, was not found
    at com.sun.jersey.api.client.RequestWriter.writeRequestEntity(RequestWriter.java:288)
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:204)
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:147)
    ... 63 more
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码:

WebResource webResource = Client.create().resource(HTTP_REST_URI);
JSONObject jSONObj = webResource.queryParams(queryParams)
      .type(MediaType.MULTIPART_FORM_DATA)
      .post(JSONObject.class, formDataMultiPart);
Run Code Online (Sandbox Code Playgroud)

如何解决这个异常?

ido*_*ode 12

MultiPartWriter创建时注册提供程序Client:

ClientConfig cc = new DefaultClientConfig();
Client client;

cc.getClasses().add(MultiPartWriter.class);
client = Client.create(cc);
Run Code Online (Sandbox Code Playgroud)

如果使用Maven,这些是您需要的依赖项pom.xml:

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-client</artifactId>
    <version>1.17.1</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey.contribs</groupId>
    <artifactId>jersey-multipart</artifactId>
    <version>1.17.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)


Bog*_*dan 9

Jersey(服务器或客户端)具有支持将Java类型转换为流的提供程序,反之亦然.您的代码返回(或接收)Java对象,并根据您使用的对象类型和内容类型,Jersey寻找合适的提供程序来进行编组(或解组).

提供程序实现MessageBodyReaderMessageBodyWriter接口,对于应用程序使用的每种Java类型和内容类型组合,您必须具有知道如何处理组合的提供程序.

您收到的消息告诉您,Jersey无法找到知道如何FormDataMultiPart使用multipart/form-datamime类型编组对象的提供程序.你需要提供一个,如果我没有弄错,可以在jersey-multipart.jarmimepull.jar文件中找到默认实现.

  • 确保使用`jersey-multipart`的版本,该版本对应于`jersey-core`的版本. (2认同)