Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jersey:找不到媒体类型=多部分/表单数据的MessageBodyReader_Java_Jersey - Fatal编程技术网

Java Jersey:找不到媒体类型=多部分/表单数据的MessageBodyReader

Java Jersey:找不到媒体类型=多部分/表单数据的MessageBodyReader,java,jersey,Java,Jersey,我已经发现了一些像这样的问题,但似乎没有一个能解决我的问题,而且我自己也无法找到解决办法 下面是我得到的错误: Caused by: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=multipart/form-data; boundary=----WebKitFormBoundaryHWk1XUaeu7pE

我已经发现了一些像这样的问题,但似乎没有一个能解决我的问题,而且我自己也无法找到解决办法

下面是我得到的错误:

Caused by: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=multipart/form-data; boundary=----WebKitFormBoundaryHWk1XUaeu7pEiDth, type=class org.glassfish.jersey.media.multipart.FormDataMultiPart, genericType=class org.glassfish.jersey.media.multipart.FormDataMultiPart.
我通过jQuery AJAX请求发送此消息,如下所示:

$('#upload-image-form').on('submit', function(e) {
    e.preventDefault();
    var data = new FormData(this);
    $.ajax({
        url: url,
        method: 'POST',
        contentType: false,
        processData: false,
        data: data,
    }).done(function(data) {
        console.log(data);
    }).fail(function(res, status) {
        onError(res, status, 'Image upload failed');
    });
});
这是我的Java端点:

@POST
@Path("/{userId}")
@Consumes("multipart/form-data")
public Response createGraphic(
   @PathParam("userId") int userId,
   FormDataMultiPart multiPartFormData) { ... }
我看到一些人很幸运地将endpoint方法的参数更改为使用@FormDataParam而不是FormDataMultiPart(如图所示),但我无法编辑Java类,因此我必须按照上面的方式使用它

My pom.xml具有以下依赖项:

<dependency>
    <groupId>org.jvnet</groupId>
    <artifactId>mimepull</artifactId>
    <version>1.6</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.12</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-multipart</artifactId>
    <version>2.12</version>
</dependency>

org.jvnet
含羞草
1.6
org.glassfish.jersey.core
泽西服务器
2.12
org.glassfish.jersey.media
泽西岛媒体多部分
2.12
web.xml

<servlet>
   <servlet-name>Jersey</servlet-name>
   <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
   <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>my.package</param-value>
   </init-param>
   <load-on-startup>5</load-on-startup>
</servlet>

<servlet-mapping>
   <servlet-name>Jersey</servlet-name>
   <url-pattern>/api/*</url-pattern>
</servlet-mapping>

运动衫
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.packages
我的包裹
5.
运动衫
/原料药/*
我能找到的另一件事是使用ResourceConfig注册MultiPartFeature;但是,我正在使用的项目没有任何应用程序类或任何扩展ResourceConfig的类(这是一个部署到Tomcat的WAR,因此没有主类)


是否需要进行其他配置?我不明白为什么这不起作用。

多部件功能具有所需的读写器。但您仍然需要注册该功能。正如您所提到的,您经常会在
应用程序/ResourceConfig
子类中看到它的注册。但是在web.xml中,您可以简单地将其添加到类列表中,作为提供者添加。您可以通过向servlet配置添加
来实现这一点,即

<init-param>
    <param-name>jersey.config.server.provider.classnames</param-name>
    <param-value>
        org.glassfish.jersey.media.multipart.MultiPartFeature,
        some.other.Provider
    </param-value>
</init-param>

jersey.config.server.provider.classnames
org.glassfish.jersey.media.multipart.MultiPartFeature,
一些,其他,提供者

正如您在示例中所看到的,如果您需要注册任何其他提供者/功能,可以用逗号分隔类名。

您是否有web.xml?@peeskillet是的,但是web.xml中唯一与Jersey相关的是servlet配置。我将这些部分添加到我的postAdd中,名为jersey.config.server.provider.classnames,值为org.glassfish.jersey.media.multipart.MultiPartFeature。我想这应该能解决问题it@peeskillet成功了!您想添加一个正式答案,以便我可以接受吗?