当前位置: 首页 > 知识库问答 >
问题:

找不到多部件特征的注入源

公良子轩
2023-03-14

当我尝试将我的maven项目部署到Glassfish 5时,我得到以下错误:

[[FATAL]在索引0处找不到类型为public javax.ws.rs.core.response com.test.resources.AccountResource.AddProfilePicture(java.io.inputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition)的参数的注入源;source='resourceMethod{httpmethod=post,consumedTypes=[multipart/form-data],producedTypes=[],suspended=falseUltValue=null]],responsetype=class javax.ws.rs.core.response},NameBindings=[]}']。有关详细信息,请参阅server.log。

这是造成问题的代码:

@POST
@Path("addProfilePicture")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response addProfilePicture(@FormDataParam("profilePicture") InputStream pic,
                                  @FormDataParam("profilePicture") FormDataContentDisposition formDataContentDisposition){



    return Response.ok().build();
}

我的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.test</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/webapi/*</url-pattern>
</servlet-mapping>

根据类似的答案,我应该添加maven依赖项并注册MultipartFeature

java prettyprint-override">@ApplicationPath("/")
public class ApplicationConfig extends Application {

    @Override
    public Set<Class<?>> getClasses() {

        HashSet<Class<?>> classes = new HashSet<>();
        classes.add(MultiPartFeature.class);
        System.out.println("added multipart feature");
        classes.add(AccountResource.class);
        return classes;
    }
}
<dependencies>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.inject</groupId>
        <artifactId>jersey-hk2</artifactId>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.11</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>${jersey.version}</version>
    </dependency>
</dependencies>

共有1个答案

司徒俊健
2023-03-14

所以事情是这样的。您有两种不同的应用程序配置:web.xml和ApplicationConfig类。这些是完全分开的配置,这两个都是有效的全部本身。ApplicationConfig类是注册MultipartFeature的类,但似乎正在使用的配置是web.xml。我从未真正测试过当您有两种不同的应用程序配置时会发生什么,但似乎您的web.xml是优先的。在web.xml中,您没有配置multipartfeature

如果您只想使用web.xml,那么您可以查看这个答案,了解out如何配置它。

但是,您可以删除整个web.xml。这将导致applicationconfig启动它。但请注意两个区别:applicationconfig上的@applicationpath与web.xml中的url-mapping类似。因此,如果删除web.xml,则基本路径将只是/(或无),而不是像web.xml中那样的/webapi

如果您决定删除web.xml,我建议您使用resourceConfig而不是application。您可以从Jersey 2中的ResourceConfig类到底是什么中获得一些关于这个类和不同配置可能性的好信息?

 类似资料:
  • 我当前的Cucumber文件如下所示: 所以现在我想再添加几个场景,可能是在同一个文件中进行API测试。所以我想为此创建一个新特性,而不是使用Feature:Test Online application页面。这样我就不需要为API测试创建单独的特性文件。

  • 尝试将多部分功能用于我的泽西岛 3 Web 应用程序。不幸的是,似乎没有找到注射源... pom.xml web.xml endpoint 我一直在看其他帖子,在我看来,我有正确的依赖项,我还在我的web.xml.中注册了Multipart-Feature,我错过了什么? 感谢您的任何意见!

  • 我正在做一个基于面部识别和验证的项目。我正在使用暹罗网络来获得人脸的128个向量(嵌入)。 我将人脸的编码/嵌入存储在数据库中,然后检查或说将传入人脸的编码与之前存储的编码匹配,以识别此人。 为了建立一个健壮的系统,我必须存储同一个人的多个编码。当我只使用了一个编码向量,并且匹配了: 从库(获取距离): 这并不是一直有效,因为我只与单个编码进行了比较。为了使系统足以满足大多数情况,我想存储同一个人

  • 我在项目中创建了一个资源文件。我想将资源文件中的值注入到Springbean中。我在applicationcontext中定义了资源文件的占位符。xml。 我可以向applicationContext中声明的bean注入值。类似xml: 这工作得很好。但是,如果我声明带有Spring注释的bean,我就不能注入值。 你知道为什么我不能访问使用注释声明的bean内的值吗? 这是我的例外

  • 我正在Rust中编写一个带有控制台提示界面的进程内存扫描器。 我需要扫描仪类型,如winapi扫描仪或ring0驱动程序扫描仪,所以我试图实现多态性。 目前我有以下结构: 将来,除了 之外,我还会有更多扫描仪类型,因此,如果我理解正确,我应该使用特征引用 (

  • 问题内容: 在执行流操作时,将在中间/流水线操作期间创建具有不同特征的流(例如:SORTED / SIZED / DISTINCT / ORDERED)-掌握Lambda(第6章) 我们如何找出上述片段中提到的流的不同特征? 问题答案: 我想稍微延长一下亚述(绝对正确)。 首先 ,这些特征被实现为plain ,它是二进制表示形式。首先是全零,但是当您添加某个特性时,通过操作将该位设置为,通过该操作