java - Payara/Glassfish JAX-RS 多部分

标签 java jakarta-ee jersey payara

我正在尝试在 paraya 上设置 jax-rs 多部分端点(我认为 glassfish 也会如此)。我用最少的 java-ee8 代码做了一个简单的例子。我知道没有标准方法可以向 jax-rs 添加多部分支持。

我发现对于 payara/glassfish 我必须添加如下所示的 MultiPartFeature 类:

@ApplicationPath("/api")
public class JAXRSConfiguration extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> classes = new HashSet<>();
        classes.add(MultiPartFeature.class);
        return classes;
    }
}

这是我的端点:

@Path("")
public class ExampleResource {
    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public String postMultipartMethod(
        @FormDataParam("field") InputStream fileInputStream,
        @FormDataParam("field") FormDataContentDisposition fileMetaData
    ) {
        return "post multipart method";
    }
}

.

curl -v -F field=@pom.xml http://localhost:8080/jax-rs-multipart/api
> POST /jax-rs-multipart/api HTTP/1.1
> Content-Type: multipart/form-data; boundary=------------------------d60a2c38aa57dfbe
> 
< HTTP/1.1 404 Not Found

我收到“404 - 请求的资源不可用”。如果我注释掉添加 MultiPartFeature 和方法字段,则端点正在工作,但我无法获取已发布的字段。如果我注释掉 MultiPartFeature 并保留方法参数,那么我会得到“未找到类型参数的注入(inject)源...”

它部署得很好,在日志中没有看到任何错误。

我把它放在github repo中如果你想重现。

最佳答案

您还需要添加您的资源类(用@Path注释)

@ApplicationPath("/api")
public class JAXRSConfiguration extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> classes = new HashSet<>();
        classes.add(MultiPartFeature.class);
        classes.add(YourResource.class);
        return classes;
    }
}

编辑: 但我找到了更好的解决方案:创建这样的类

@Provider
public class MultiPartFeatureProvider extends MultiPartFeature {
}

关于java - Payara/Glassfish JAX-RS 多部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58381702/

相关文章:

java - Java 自然语言处理 (NLP)

java - Java 中的阿姆斯特朗数字代码无法正常工作

java - 当交易超时时如何执行一些操作

java - 界面设计模式/Java/Seam

jakarta-ee - 如何在 Netbeans (7.0.1) 中将现有项目从 Java EE5 降级到 J2EE 1.4

java - 那里有 "Jetty server builder"项目吗?

java - 为什么 equals() 中的顺序相反

java - 由于某种原因数据没有存储在 SQLite 数据库中?错误

java - 如何使用 Jersey 将带注释的对象列表从客户端传递到服务器

java - 从命令行运行 jar 时出现 MessageBodyProviderNotFoundException