gpt4 book ai didi

java - org.glassfish.jersey 使用 FormDataContentDisposition 上传文件

转载 作者:行者123 更新时间:2023-11-29 07:41:44 29 4
gpt4 key购买 nike

http://www.mkyong.com/webservices/jax-rs/file-upload-example-in-jersey/我正在按照本指南进行操作并遇到问题。我有一些问题。

  1. 是否所有的依赖都必须对应?我的项目有一些 org.glassfish.jersey 依赖项,本指南建议使用 org.sun.jersey。我是否必须使用与此相同的版本来更改它?

    <dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-multipart</artifactId>
    <version>2.16</version>
    </dependency>
    <dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.16</version>

  2. 我有这个错误

    org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization. [[FATAL] No injection source found for a parameter of type public ***.***.****.common.dto.response.AbstractResponse ***.***.****.m2m.instancetypeupload.webservice.InstanceTypeUploadWebService.upload(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition) at index 0.; source='ResourceMethod{httpMethod=POST, consumedTypes=[multipart/form-data], producedTypes=[application/json], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class ***.***.****.m2m.instancetypeupload.webservice.InstanceTypeUploadWebService, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@90516e]}, definitionMethod=public ***.***.***.common.dto.response.AbstractResponse ***.***.*****.m2m.instancetypeupload.webservice.InstanceTypeUploadWebService.upload(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition), parameters=[Parameter [type=class java.io.InputStream, source=file1, defaultValue=null], Parameter [type=class org.glassfish.jersey.media.multipart.FormDataContentDisposition, source=file1, defaultValue=null]], responseType=class ***.***.***.common.dto.response.AbstractResponse}, nameBindings=[]}']

    这是我的网络服务

    @POST
    @Path("/upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Produces(MediaType.APPLICATION_JSON)
    public AbstractResponse upload(@FormDataParam("file1") InputStream file1,
    @FormDataParam("file1") FormDataContentDisposition filename1
    ) {

    这是我的电话:

    $.ajax({
    url: 'http://localhost:8080/******/webapi/m2m/upload',
    data: fd,
    processData: false,
    contentType: 'multipart/form-data',
    type: 'POST',
    success: function(data){
    alert(JSON.stringify(data));
    return;
    }
    });

如果 Web 服务只有 1 个参数 (FormData InputStream),则该 Web 服务是可访问的。如何解决?

  1. 我还想为网络服务添加另一个字符串参数。我该怎么办?

谢谢 peeskillet 的回答。有点额外。

SEVERE: The web application [/linterm2m] created a ThreadLocal with key of type [org.jvnet.hk2.internal.PerLocatorUtilities$1] (value [org.jvnet.hk2.internal.PerLocatorUtilities$1@df94b1]) and a value of type [java.util.WeakHashMap] (value [{}]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.

最佳答案

如果您的项目正在使用 org.glassfish ,您正在使用 Jersey 2。com.sun是 Jersey 1,你不应该把两者混在一起。话虽如此,您面临的错误很可能是由于您没有注册 MultipartFeature。 .当资源模型(资源方法)在启动时被验证“正确性”时,如果该功能未注册,则特定于该功能的注释是未知的,就像没有注释一样。并且您不能有多个没有注释的方法参数。

如果您使用的是 ResourceConfig , 你可以简单地使用

public class JerseyConfig extends ResourceConfig {
public JerseyConfig() {
register(MultiPartFeature.class);
}
}

如果您使用的是 web.xml,则可以设置 <init-param>对于您注册的 Jersey servlet

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

"I also want to add another String parameter for the web service. What should I do?"

您需要将其作为多部分请求的一部分,并且客户端需要确保也将其作为多部分请求的一部分发送。在服务器端只需添加另一个 @FormDataParam("anotherString") String anotherString作为方法参数。至于客户端,我不知道 jQuery 会帮助解决这个问题。还没有测试过,但你可以试试 this , 它显示了附加到 FormParam 的数据.这是 something with Angular ,我自己构建请求主体的地方。可能有点多,因为您可能不需要显式设置内容类型。

关于java - org.glassfish.jersey 使用 FormDataContentDisposition 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29406331/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com