在Tomcat中将Multipart特性添加到Jersey Web Service中

时间:2017-06-10 17:49:43

标签: java tomcat jersey jax-rs

我正在尝试实现一个Jax-RS(Jersey),它具有/ upload端点,用户可以使用Multipart上传图像。项目已经实现了其他部分并且工作正常,当我尝试添加Multipart功能时会出现问题。

我使用IntelliJ IDEA和Tomcat 8.5.xx来部署我的应用程序。

我在pom.xml中的依赖关系如下;

<dependencies>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.25.1</version> <!-- 2.10.1 -->
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.25.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>2.25.1</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.42</version>
    </dependency>
</dependencies>

这是我的web.xml部分;

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

当我在Tomcat中启动WAR时,它显示内部服务器错误500和日志;

java.lang.IllegalStateException: The resource configuration is not modifiable in this context.
    org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:274)
    org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:221)
    org.glassfish.jersey.server.ResourceConfig.register(ResourceConfig.java:453)
    org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:387)
    org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:177)
    org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:369)
    javax.servlet.GenericServlet.init(GenericServlet.java:158)

我不知道问题的原因是什么。从异常的名称,我猜它与web.xml添加的MultipartFeature有关。然而,由于我没有足够的经验并且我在谷歌上的搜索结果不好,我需要更有经验的人的帮助。

1 个答案:

答案 0 :(得分:0)

嗯,当该特定网址的jersey资源方法有多个映射时,通常会出现此类错误。

您在问题中提到您要为上传网络服务/upload添加路径。因此,可能的原因是之前开发的API之一已存在此路径。因此,请相应地检查并更新此路径。

此错误还有其他可能的原因,您可以找到herehere