gpt4 book ai didi

java - 无法使用 Jax-RS 上传文件

转载 作者:搜寻专家 更新时间:2023-10-31 20:27:11 24 4
gpt4 key购买 nike

我想使用 Jersey 框架。我在 Java EE7 上使用 ant 应用程序运行 Web 服务。我的应用服务器是 Glassfish

我的方法是这样的:

 package mypackage.service;
...
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import org.glassfish.jersey.media.multipart.FormDataParam;

@POST
@Path("createSomething")
@Consumes(MULTIPART_FORM_DATA)
@Produces(APPLICATION_XML)
public Response createSomething(@FormDataParam("upload") InputStream is, @FormDataParam("upload") FormDataContentDisposition formData, @QueryParam("some") String some, @Context HttpServletRequest request) {

String fileLocation = "C:\\UploadFile\\" + formData.getFileName();

//more things, do not matter

try {
ctrl.saveFile(is, fileLocation);
String result = "Successfully File Uploaded on the path " + fileLocation;
return Response.status(Response.Status.OK).entity(result).build();
} catch (IOException e) {
e.printStackTrace();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();

}

我还有一个应用程序配置:

package mypackage.service;

import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.core.Application;
import org.glassfish.jersey.media.multipart.MultiPartFeature;

@javax.ws.rs.ApplicationPath("")
public class ApplicationConfig extends Application {

@Override
public Set<Class<?>> getClasses() {
final Set<Class<?>> resources = new HashSet<>();
addRestResourceClasses(resources);
resources.add(MultiPartFeature.class);

return resources;

}

/**
* Do not modify addRestResourceClasses() method. It is automatically
* populated with all resources defined in the project. If required, comment
* out calling this method in getClasses().
*/
private void addRestResourceClasses(Set<Class<?>> resources) {
resources.add(mypackage.service.MYSERVICE.class);


}

}

在 myweb.xml 上我有:

<servlet>
<servlet-name>ServletAdaptor</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>mypackage.service.ApplicationConfig</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>mypackage.service</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.filter.LoggingFilter;org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
</init-param>

<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>ServletAdaptor</servlet-name>
<url-pattern>/createSomething/*</url-pattern>
</servlet-mapping>

我仍然收到相同的消息:

由以下原因引起:org.apache.catalina.LifecycleException:org.glassfish.jersey.server.model.ModelValidationException:应用程序初始化期间应用程序资源模型的验证失败。[[致命] 没有找到类型为 public javax.ws.rs.core.Response 的参数的注入(inject)源

我做错了什么??

最佳答案

它对我来说很好用。尽管我会完全摆脱 Application 子类。它不是必需的,并且可能会导致冲突/困惑。您的 xml 已足够配置,只需摆脱 javax.ws.rs.Application <init-param> .我还会考虑使多部分 jar 仅成为编译时 jar(意味着不内置于 war 中 - 它们可能与 Glassfish 的版本冲突)。我用 Ant 的工作不多,所以我不确定你如何做到这一点,但我知道这是可能的。

关于java - 无法使用 Jax-RS 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31411707/

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