这是我到目前为止

这将初始化我的REST服务

package com.dothatapp.web.rest;

import javax.servlet.annotation.MultipartConfig;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/authed/rest")
public class JaxRsActivator extends Application {
}

这是我的服务看起来像

import javax.servlet.http.HttpServletRequest;
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.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriInfo;

import org.json.JSONObject;

@Path("fileupload")
public class FileUpload {

    @Context
    private UriInfo context;

    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Produces(MediaType.APPLICATION_JSON)
    public JSONObject doUpload(@Context HttpServletRequest obj) {
        try {
            obj.getParts();
        } catch (Exception e) {
            e.printstacktrace();
        } 
        System.out.println(us);
        System.out.println(es);
        System.out.println(obj);
        return null;
    }
}

我尝试添加@MultipartConfig到JaxRsActivator,但我仍然得到一个异常:Request.getParts被调用没有多部分配置.可以将@MultipartConfig添加到servlet,或者将multipart-config元素添加到web.xml.

3-12-08T17:03:05.013+0000|SEVERE: java.lang.IllegalStateException: Request.getParts is called without multipart configuration. Either add a @MultipartConfig to the servlet,or a multipart-config element to web.xml
    at org.apache.catalina.connector.Request.checkMultipartConfiguration(Request.java:4522)
    at org.apache.catalina.connector.Request.getParts(Request.java:4528)
    at org.apache.catalina.connector.RequestFacade.getParts(RequestFacade.java:1086)
    at com.dothatapp.web.rest.FileUpload.doUpload(FileUpload.java:36)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81)
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethoddispatcher.invoke(AbstractJavaResourceMethoddispatcher.java:125)
    at org.glassfish.jersey.server.model.internal.JavaResourceMethoddispatcherProvider$TypeOutInvoker.dodispatch(JavaResourceMethoddispatcherProvider.java:195)
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethoddispatcher.dispatch(AbstractJavaResourceMethoddispatcher.java:91)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:346)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:341)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:101)
    at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:224)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:198)
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:946)
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:323)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:372)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:335)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:218)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at com.dothatapp.web.filter.DoThatAppFilter.doFilter(DoThatAppFilter.java:27)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at com.dothatapp.web.filter.AuthFilter.doFilter(AuthFilter.java:113)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
    at org.glassfish.grizzly.strategies.WorkerThreadioStrategy.run0(WorkerThreadioStrategy.java:115)
    at org.glassfish.grizzly.strategies.WorkerThreadioStrategy.access$100(WorkerThreadioStrategy.java:55)
    at org.glassfish.grizzly.strategies.WorkerThreadioStrategy$WorkerThreadRunnable.run(WorkerThreadioStrategy.java:135)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)
    at java.lang.Thread.run(Thread.java:724)

谢谢

解决方法

最后,我设法得到这个工作,没有泽西耦合.
问题是@Multipart注释不适用于应用程序,因此您需要在web.xml中定义它,并在Application类中定义提供的服务.在服务内部,您可以正常使用注释.另请注意,我从请求中提取部件,但这很容易.

PS.这实际上实现了bluimp JQuery file upload的后端

web.xml中

<servlet>
    <servlet-name>com.web.rest.JaxRsActivator</servlet-name>
    <multipart-config>
        <location>c:\dotmp</location>
        <max-file-size>35000000</max-file-size>
        <max-request-size>218018841</max-request-size>
        <file-size-threshold>0</file-size-threshold>
    </multipart-config>
</servlet>
<servlet-mapping>
    <servlet-name>com.dothatapp.web.rest.JaxRsActivator</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

JaxRsActivator.java

import java.util.HashSet;
    import java.util.Set;

    import javax.ws.rs.core.Application;

    public class JaxRsActivator extends Application {
          @Override
            public Set<Class<?>> getClasses() {
                Set<Class<?>> s = new HashSet<Class<?>>();
                s.add(FileUpload.class);
                return s;
            }
    }

FileUpload.java

import java.io.IOException;

import javax.json.Json;
import javax.json.JsonArrayBuilder;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
import javax.servlet.servletexception;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Part;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Path("/")
public class FileUpload {

    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Path("fileupload")
    public Response doUpload(@Context HttpServletRequest request) {
        JsonArrayBuilder array = Json.createArrayBuilder();

        try {
            for (Part part : request.getParts()) {
                String name = null;
                long size = 0;
                try {
                    if (part.getContentType() == null
                            || !part.getContentType().toLowerCase()
                                    .startsWith("image/"))
                        continue;

                    name = part.getSubmittedFileName();
                    size = part.getSize();

                    array.add(addFile(name,size,"anId"));
                    part.delete();
                } catch (Exception e) {
                    array.add(addError(name,"ERROR"));
                }
            }
        } catch (IOException | servletexception e) {
            e.printstacktrace();
        }

        JsonObject ret = Json.createObjectBuilder().add("files",array).build();
        return Response.status(201).entity(ret).build();
    }

    private JsonObjectBuilder addFile(String name,long size,String url) {
        return Json.createObjectBuilder().add("name",name).add("size",size)
                .add("lid",url);
    }

    private JsonObjectBuilder addError(String name,String error) {
        return Json.createObjectBuilder().add("name",size)
                .add("error",error);
    }

}

java – 如何定义在JEE中处理多部分数据的JAX-RS服务?的更多相关文章

  1. 用fileupload组件实现的大文件上传简单实例

    下面小编就为大家带来一篇用fileupload组件实现的大文件上传简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. FileUpload 控件 禁止手动输入或粘贴的实现代码

    FileUpload 控件 禁止手动输入或粘贴的实现代码,经常用于比较安全无误的输入,例如身份证号码,密码,银行账户等。

  3. JSP组件commons-fileupload实现文件上传

    这篇文章主要为大家详细介绍了JSP组件commons-fileupload实现文件上传,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  4. JSP使用Common FileUpload组件实现文件上传及限制上传类型实例代码

    这篇文章主要介绍了JSP使用Common FileUpload组件实现文件上传及限制上传类型实例代码,需要的朋友可以参考下

  5. Angular2-primeNG文件上传模块FileUpload使用详解

    这篇文章主要为大家详细介绍了Angular2-primeNG文件上传模块FileUpload使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  6. 基于fileUpload文件上传带进度条效果的实例(必看)

    下面小编就为大家带来一篇基于fileUpload文件上传带进度条效果的实例(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. JAX-RS获取打开连接时间

    我正在使用JAX-RS进行HTTP请求。是否有方法获取打开连接所需的时间?打开连接和读取响应似乎对调用函数是隐藏的。

  8. ajax – jsf 2.0 Primefaces多个Fileupload不记得上传的文件

    我已经在这篇文章中解决了一些其他问题,我的代码如下:豆:XHTML页面:我现在面临的问题是,当我上传多个文件时,其中只有一个被附加到空列表中.当我重新上载剩下的两个文件时,再次只将其中一个文件附加到列表中.有趣的是,为每个文件调用handleFileUpload(…当我同时上传三个文件时,这是我的控制台输出:我该怎么做才能使fileupload-component正常运行?这是一个bug还是一个ajax问题?

  9. ajax – 使用Django的FileUpload

    我正在使用ajax-upload代码进行简单的AJAX文件上传.我遇到的问题是提交后文件没有显示在后端.前端代码非常基本:后端代码也非常基本:对我来说,使用AlexKuhl中的代码,request.GET[‘qqfile’]具有文件名,request.read()返回数据.request.FILES仅用于尚未发生的情况.我正在使用ajax-upload直接与Photologue对话,我的代码看起来像这样:在我的例子中,ajax_upload是ajax的action:参数调用的函数

  10. 实用插件十ajax图片上传插件——fileupload

    前言刚开始使用的是ajaxFileUpload插件,但是按照其他人的博文所说,直接使用data来传入参数,会报错跨域。换言之,此例子中,fileupload只是单纯的上传,无须返回;imgUp只负责获取本地图片并展示。jQueryFileUpload有多个文件选择,拖放上传控件拖放支持,进度条,验证和预览图像,音频和视频。

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部