Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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 将文件(例如file1.json)发送到POST REST API,输入流为空_Java_Rest_Intellij Idea_Jersey_Jax Rs - Fatal编程技术网

Java 将文件(例如file1.json)发送到POST REST API,输入流为空

Java 将文件(例如file1.json)发送到POST REST API,输入流为空,java,rest,intellij-idea,jersey,jax-rs,Java,Rest,Intellij Idea,Jersey,Jax Rs,我有以下REST API来解析给定的JSON: POST @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces(MediaType.TEXT_PLAIN) @Path("/test") public String getText(@FormDataParam("file") InputStream fileInputStream, @FormDataParam("file") FormDataContentDisposition fileDetai

我有以下REST API来解析给定的JSON:

POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.TEXT_PLAIN)
@Path("/test")
public String getText(@FormDataParam("file") InputStream fileInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail) throws Exception {
当我使用chrome扩展名postman测试它时,filedetail.getName()正在工作,但是接收到的输入流为null。这里是我发送的post请求:

POST /parse/test HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache

----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="file"; filename="1.json"
Content-Type: 


----WebKitFormBoundaryE19zNvXGzXaLvS5C
接收到的inputstream为空

注意:如果我将内容类型设置为“multipart/form data”,则会出现一个异常:

java.lang.NullPointerException
    com.sun.jersey.multipart.impl.MultiPartReaderClientSide.unquoteMediaTypeParameters(MultiPartReaderClientSide.java:245)
    com.sun.jersey.multipart.impl.MultiPartReaderClientSide.readMultiPart(MultiPartReaderClientSide.java:172)
    com.sun.jersey.multipart.impl.MultiPartReaderServerSide.readMultiPart(MultiPartReaderServerSide.java:80)
    com.sun.jersey.multipart.impl.MultiPartReaderClientSide.readFrom(MultiPartReaderClientSide.java:158)
    com.sun.jersey.multipart.impl.MultiPartReaderClientSide.readFrom(MultiPartReaderClientSide.java:85)
    com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:490)
    com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:555)
    com.sun.jersey.multipart.impl.FormDataMultiPartDispatchProvider$FormDataInjectableValuesProvider.getInjectableValues(FormDataMultiPartDispatchProvider.java:122)
    com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$EntityParamInInvoker.getParams(AbstractResourceMethodDispatchProvider.java:153)
    com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:183)

因此,我发送它时没有任何标题,如何读取我从邮递员那里发送的文件,我的RESTAPI有什么问题吗?

您是否使用
org.glassfish.jersey.bundle
(jaxrs ri)

如果这样做,则必须将
MultiPartFeature.class
添加到应用程序config.java(其中包含对getClasses()的重写)

如果使用grizzly,则必须在
ResourceConfig
中放置并注册该类

这里有两个例子

第一灰熊

public static HttpServer startServer() {
    final ResourceConfig rc = new ResourceConfig().packages(true, "your.controllers.package");
    rc.register(MultiPartFeature.class);

    return GrizzlyHttpServerFactory.createHttpServer(URI.create("http://localhost:8080/"),rc);
}
现在是球衣

@Override
public Set<Class<?>> getClasses() {
    Set<Class<?>> resources = new HashSet<>();
    addResources(resources);
    return resources;
}

private void addResources(Set<Class<?>> resources) {
    resources.add(MultiPartFeature.class);
}
@覆盖
public Set>resources=new HashSet();
添加资源(资源);
归还资源;
}
私有资源(集合)