没有可用的媒体类型MessageBodyWriter" multipart / form-data" [英] No available MessageBodyWriter for media type "multipart/form-data"

查看:210
本文介绍了没有可用的媒体类型MessageBodyWriter" multipart / form-data"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个针对具有多部分请求的服务器的泽西客户端。

我要将文件上传为 java.io.ByteArrayOutputStream 输入流。

我搜索了错误并遇到了这个问题在这里在这里回答
并添加了
在创建客户端时注册(MultiPartFeature.class),但无效。

我可能只需要朝着正确的方向努力。谢谢!


我没有使用Maven或其他任何东西。



来自我的 java 文件的相关部分是:

I'm trying to create a jersey client to hit a server with multipart request.
I have the file to upload as a java.io.ByteArrayOutputStream type stream.
I searched for the error and came across this question here and this answer here
and added register(MultiPartFeature.class) while creating a Client, but to no effect.
I probably just need a nudge in the right direction. Thanks!

I'm not using Maven or anything.

Relevant part from my java file is:

FormDataMultiPart multiPart = new FormDataMultiPart();
FormDataContentDisposition.FormDataContentDispositionBuilder dispositionBuilder = FormDataContentDisposition
 .name("file");

dispositionBuilder.fileName("file.zip");
FormDataContentDisposition formDataContentDisposition = dispositionBuilder.build();

/*
 * byteArrayOutputStream is of type java.io.ByteArrayOutputStream
 * and contains the file I wish to upload.
 */
multiPart.bodyPart(
 new FormDataBodyPart("file", byteArrayOutputStream, MediaType.APPLICATION_OCTET_STREAM_TYPE)
 .contentDisposition(formDataContentDisposition));

Entity < FormDataMultiPart > entity = Entity.entity(multiPart, MediaType.MULTIPART_FORM_DATA_TYPE);

Client client = ClientBuilder.newClient(new ClientConfig().register(MultiPartFeature.class));
WebTarget webTarget = client.target("http://localhost:3000/path/to/service");

// send request

Invocation.Builder invocationBuilder = webTarget.request();
Response response = invocationBuilder.post(entity);
return response;

来自 web.xml 的相关部分是:

          <servlet>
              <servlet-name>Jersey Web Application</servlet-name>
              <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
              <init-param>
                     <param-name>jersey.config.server.provider.packages</param-name>
                     <param-value>com.example</param-value>
              </init-param>
              <init-param>
                     <param-name>jersey.config.server.provider.classnames</param-name>
                     <param-value>org.glassfish.jersey.filter.LoggingFilter;org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
              </init-param>
              <load-on-startup>1</load-on-startup>
       </servlet>

尝试在Apache Tomcat 8.5运行时服务器上运行Eclipse时出现以下错误。

I get this following error while trying to run it inside Eclipse on a Apache Tomcat 8.5 runtime server.

SEVERE: Servlet.service() for servlet [Jersey Web Application] in context with path [/TestRest] threw exception [javax.ws.rs.ProcessingException: No available MessageBodyWriter for class "class java.io.ByteArrayOutputStream" and media type "multipart/form-data".] with root cause
java.lang.IllegalArgumentException: No available MessageBodyWriter for class "class java.io.ByteArrayOutputStream" and media type "multipart/form-data".
    at org.glassfish.jersey.media.multipart.internal.MultiPartWriter.writeTo(MultiPartWriter.java:229)
    at org.glassfish.jersey.media.multipart.internal.MultiPartWriter.writeTo(MultiPartWriter.java:79)
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:265)
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:250)
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
    at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1130)


推荐答案

没有 MessageBodyWriter 处理 OutputStream 。使用 InputStream 而不是

这篇关于没有可用的媒体类型MessageBodyWriter&quot; multipart / form-data&quot;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆