Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >没有为公共javax.ws.rs.core.Response -泽西- MultiPartFeature类型的参数找到注入源。

没有为公共javax.ws.rs.core.Response -泽西- MultiPartFeature类型的参数找到注入源。
EN

Stack Overflow用户
提问于 2016-02-09 17:47:53
回答 1查看 10.2K关注 0票数 2

我正在创建一个没有web.xml文件的泽西和Jetty嵌入的web服务。它非常简单,它从HTML表单中通过POST接收二进制文件。我似乎没有正确地注册MultiPart特性,因为当我尝试将它与HTML一起使用时,我得到了以下错误:

*

警告:没有为类型为public javax.ws.rs.core.Response的参数找到注入源,org.multipart.demo.ReceiveFile.postMsg(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition)会在索引0处抛出java.lang.Exception。2016-02-09 21:49:59.916:警告:/: for 1364335809-16:应用程序资源模型的不可用org.glassfish.jersey.server.model.ModelValidationException:验证在应用程序初始化过程中失败。来源=‘ResourceMethod{httpMethod=POST,消费型=多部分/表单-数据,producedTypes=text/平原,suspended=false,suspendTimeout=0,

  • 几个星期以来,我一直在寻找解决方案,我在StackOverflow上阅读了所有与此错误相关的问题,例如:

DATA: No injection source found for a parameter of type public javax.ws.rs.core.Response

Jersey 2 injection source for multipart formdata

他们没有帮助我,因为我不使用web.xml

我有三个类- ReceiveFile.class (尝试接收POST) - resourceConfig.class (尝试注册MultiPart特性)- JettyServer.class (创建服务器实例)

ReceiveFile.class

代码语言:javascript
运行
AI代码解释
复制
package org.multipart.demo;
import java.io.InputStream;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import org.glassfish.jersey.media.multipart.FormDataParam;



@Path("/resources")
public class ReceiveFile 
{

        @POST
        @Path("/fileUpload")
        @Produces("text/plain")
        @Consumes(MediaType.MULTIPART_FORM_DATA)
        public Response postMsg (
                @FormDataParam("file") InputStream stream,
                @FormDataParam("file") FormDataContentDisposition fileDetail) throws Exception {


                    Response.Status respStatus = Response.Status.OK;




                    return Response.status(respStatus).build();
                    }

}

resourceConfig.class

代码语言:javascript
运行
AI代码解释
复制
package org.multipart.demo;
import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

import org.glassfish.jersey.media.multipart.MultiPart;
import org.glassfish.jersey.media.multipart.MultiPartFeature;
import org.glassfish.jersey.server.ResourceConfig;


    /**
     * Registers the components to be used by the JAX-RS application  
     *
     */
@ApplicationPath("/resources/fileUpload")
public class resourceConfig extends ResourceConfig {

     /**
        * Register JAX-RS application components.
        */  

        public resourceConfig(){
            register(ReceiveFile.class);    
            register(JettyServer.class);
            register(MultiPartFeature.class);
            //packages("org.glassfish.jersey.media", "com.mypackage.providers");


        }

}

JettyServer.class

代码语言:javascript
运行
AI代码解释
复制
package org.multipart.demo;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.glassfish.jersey.media.multipart.MultiPartFeature;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.ServerProperties;


public class JettyServer
{
    //   private static final Logger LOGGER = Logger.getLogger(UploadFile.class.getName()); 


public static void main(String[] args) throws Exception
{

    ResourceConfig config = new ResourceConfig();
    config.packages("org.multipart.demo");

    Server jettyServer = new Server(8080);

    ResourceHandler resource_handler = new ResourceHandler();

    // Configure the ResourceHandler. Setting the resource base indicates where the files should be served out of.
    // In this example it is the current directory but it can be configured to anything that the jvm has access to.
    resource_handler.setDirectoriesListed(true);
    resource_handler.setWelcomeFiles(new String[]{ "./index.html" , "./html/FileUpload.html"  });
    resource_handler.setResourceBase(".");

    //Jersey ServletContextHandler
    final ResourceConfig resourceConfig = new ResourceConfig(ReceiveFile.class);
    resourceConfig.register(MultiPartFeature.class);

    ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
    ServletHolder jerseyServlet = servletContextHandler.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*" );
    jerseyServlet.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "org.multipart.demo");

    // Add the ResourceHandler to the server.
    HandlerList handlers = new HandlerList();
    handlers.setHandlers(new Handler[] { resource_handler, servletContextHandler, new DefaultHandler() });
    jettyServer.setHandler(handlers);

    try {
        jettyServer.start();
        jettyServer.join();
    } finally {
        jettyServer.destroy();
    }
}


}

the pom.xml

代码语言:javascript
运行
AI代码解释
复制
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org</groupId>
  <artifactId>multipart.demo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>multipart.demo</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
  <dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-server</artifactId>
    <version>9.2.3.v20140905</version>
  </dependency>
  <dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-servlet</artifactId>
    <version>9.2.3.v20140905</version>
  </dependency>
  <dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.7</version>
  </dependency>
  <dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet-core</artifactId>
    <version>2.7</version>
  </dependency>
  <dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-jetty-http</artifactId>
    <version>2.7</version>
  </dependency>
  <dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-moxy</artifactId>
    <version>2.7</version>
  </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
 <dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-multipart</artifactId>
    <version>2.7</version>
</dependency>
 <dependency>
    <groupId>org.jvnet.mimepull</groupId>
    <artifactId>mimepull</artifactId>
    <version>1.9.6</version>
</dependency>
  </dependencies>
</project>

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-09 20:15:02

我在您的代码库中看到了三种不同的ResourceConfig,但它们都没有实际用于应用程序。因此,MultiPartFeature永远不会注册,这就是导致错误的原因。对于如何在您的情况下使用ResourceConfig,您有几个选项。

  1. 您可以实例化ServletContainer,传入ResourceConfig实例。不幸的是,没有ServletContextHolder#addServlet(Servlet)方法,但是有一个ServletContextHolder#addServlet(ServletHolder)方法,所以我们需要将ServletContainer封装在ServletHolder中。 servletContextHolder.addServlet(jerseyServlet,ServletHolder jerseyServlet =新ServletHolder(新ServletContainer(resourceConfig));
  2. 使用上面的选项,您可以使用本地实例或子类,但是如果您只有一个子类,比如您的第一段代码,那么您可以添加一个servlet来指定ResourceConfig子类。 新ServletContextHandler(ServletContextHandler.SESSIONS);ServletHolder jerseyServlet = servletContextHandler.addServlet(org.glassfish.jersey.servlet.ServletContainer.class,"/*“;jerseyServlet.setInitParameter(ServerProperties.PROVIDER_PACKAGES,"org.multipart.demo");jerseyServlet.setInitParameter(ServletProperties.JAXRS_APPLICATION_CLASS,resourceConfig.class.getCanonicalName( ); 注意我设置应用程序类名的最后一个调用。
  3. 不使用ResourceConfig,您只需使用init param注册MulitPartFeature即可。 jerseyServlet.setInitParameter(ServerProperties.PROVIDER_CLASSNAMES,MultiPartFeature.class.getCanonicalName();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35305517

复制
相关文章
绕过CDN找到源站的思路
网上有很多绕过CDN的思路,但是存在很多问题,以下是收集并总结的思路。 站在站长的角度,不可能每个站都会用上CDN。 站在DNS服务商的角度,历史解析记录可能不受CDN服务商控制。 站在CDN服务商的角度,提供CDN服务的区域有限制,CDN流量有限制。
HACK学习
2019/08/06
1.8K0
MyBatisPlus注入公共Sql问题
转载自 https://blog.csdn.net/synsdeng/article/details/78354462
allsmallpig
2021/02/25
1.1K0
python找到多个字典中的公共键
python找到多个字典中的公共键 生成字典 from random import randint,sample s = 'abcdefg' s1 = {x:randint(1,4) for x in sample(s,randint(3,6))} s2 = {x:randint(1,4) for x in sample(s,randint(3,6))} s3 = {x:randint(1,4) for x in sample(s,randint(3,6))} 方案1:循环判断 res = [] fo
听城
2018/04/27
4.1K0
SpringMVC 参数注入
写一个web service, 总是400. 说是request有问题,server不识别。然而检查了很多次都没问题。最终问题指向spring对参数的解析和注入。 一个controller中可以自定义参数,只要参数和request的参数匹配就会自动注入。针对自定义POJO,显然是spring帮忙给new了一个新的,然后把参数扔进去。 测试发现,不是setter方法的问题。 最后,发现自己在POJO中添加了个构造函数但却么有声明无参构造函数,这样导致spring无法调用无参构造函数,于是bad request
Ryan-Miao
2018/03/13
8280
CA1062:验证公共方法的参数
外部可见方法取消引用其中一个引用参数,而不验证该参数是否 null(Visual Basic 中 Nothing)。
呆呆
2022/01/10
7310
jsdelivr静态公共库已开始DNS污染- 星泽V社
JSDelivr是一种特殊的CDN。 它旨在让用户下载npm和Github上托管JavaScript库,jsDelivr是一个开源的网站,提供免费的cdn加速加载资源。
星泽V社
2022/05/01
1.1K0
jsdelivr静态公共库已开始DNS污染- 星泽V社
SQL 注入类型详解
笔者最初学习 SQL 注入时,大家对于 SQL 注入类型的归类让我头脑一片混乱,后来笔者发现其实大家都是根据 sqlmap 上给出的“类型”来划分的。所以,今天在这里,笔者根据自己所学所知来对 SQL 注入进行一个分类,以及讲解一些在注入时十分重要而有用的知识,相信对初学者十分有用。
信安之路
2018/08/08
3.3K0
SQL 注入类型详解
Actframework依赖注入 II - 注入对象类型
1. 框架内置绑定 在ActFramework中有大量的服务和组件都可以直接使用依赖注入,其中包括 ActionContext - Encapsulate all data/info relevant to an HTTP request context H.Session - HTTP request session. Also available via actionContext.session() H.Flash - HTTP request flash. Also available via ac
老码农
2018/06/27
3140
1.2.2-SQL注入-SQL注入语法类型-报错注入
构造payload让信息通过错误提示回显出来 应用场景: 查询不回显内容,会打印错误信息 Update、insert等语句,会打印错误信息
tea9
2022/07/16
1.6K0
1.2.2-SQL注入-SQL注入语法类型-报错注入
30个免费且很棒的公共数据源分享
机器学习、人工智能、区块链、预测分析——所有令人惊叹的技术都承诺将革新商业和社会。
IT派
2018/07/30
1K0
30个免费且很棒的公共数据源分享
Spring-注入参数详解-[通过util命名空间简化集合类型的配置]
如果希望配置一个集合类型的Bean,而非一个集合类型的属性,则可以通过util命名空间进行配置。
小小工匠
2021/08/16
4700
Spring-注入参数详解-[集合类型属性]
java.util包中的集合类型是最常用的结构数据类型,主要包括List、Set、Map、Properties。
小小工匠
2021/08/16
4090
Spring-注入参数详解-[字面值及引用其他Bean]
在Spring配置文件中,不但可以将String、int等字面值注入bean中,还可以将集合、map等类型的数据注入Bean中, 此外还可以注入配置文件中其他定义的Bean.
小小工匠
2021/08/16
5150
解析类型参数
这个方法有效的原因是:向容量为零的切片追加元素将分配一个新的底层数组。函数体的长度最终比函数签名的长度要短,函数体短是一方面原因,函数签名长是另一方面原因。在本博客文章中,我们将解释为什么函数签名被写成这样。
孟斯特
2023/10/04
1560
解析类型参数
JVM参数类型
1. 标准参数 * -help * -server , -client * -version . -showversion * -cp , -classpath
用户1212940
2022/04/13
5930
JVM参数类型
解析类型参数
这个方法有效的原因是:向容量为零的切片追加元素将分配一个新的底层数组。函数体的长度最终比函数签名的长度要短,函数体短是一方面原因,函数签名长是另一方面原因。在本博客文章中,我们将解释为什么函数签名被写成这样。
孟斯特
2023/10/19
1710
解析类型参数
Spring-注入参数详解-[简化配置方式]
Spring为字面值、引用Bean和集合都提供了简化的配置方式,如果没有用到完整格式的特殊功能,大可使用简化的配置方式。
小小工匠
2021/08/16
2740
找到合适的模型参数提高准确度
如果一直在阅读有关数据科学或机器学习的知识,那么一定遇到与MNIST数据集一起使用的文章和项目。数据集包括一组70,000个图像,其中每个图像是从0到9的手写数字。决定使用相同的数据集来了解如何微调机器学习模型参数可以产生差异。
代码医生工作室
2019/06/21
7290
找到合适的模型参数提高准确度
点击加载更多

相似问题

MULTIPART_FORM_DATA:没有为公共javax.ws.rs.core.Response类型的参数找到注入源

113

无法注册泽西MultiPartFeature

12

泽西ModelValidationException -没有找到注入源

32

泽西3多部分功能没有注入源

115

MULTIPART_FORM_DATA:没有为类型响应的参数找到注入源

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文