简体   繁体   English

Payara/Glassfish JAX-RS 多部分

[英]Payara/Glassfish JAX-RS multipart

I'm trying to setup jax-rs multipart endpoint on paraya (I think same will be with glassfish).我正在尝试在 paraya 上设置 jax-rs 多部分端点(我认为 glassfish 也是如此)。 I've made simple example with just a minimal java-ee8 code.我用最小的 java-ee8 代码做了一个简单的例子。 I know that there is no standard way for adding multipart support to jax-rs.我知道没有向 jax-rs 添加多部分支持的标准方法。

I found that for payara/glassfish I must add MultiPartFeature class like this:我发现对于 payara/glassfish 我必须像这样添加 MultiPartFeature class :

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

This is my endpoint:这是我的端点:

@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

I'm getting "404 - The requested resource is not available".我收到“404 - 请求的资源不可用”。 If I comment out adding MultiPartFeature and method fields, then endpoint is working, but I can't get posted fields.如果我注释掉添加 MultiPartFeature 和方法字段,则端点正在工作,但我无法获得发布的字段。 If I comment out MultiPartFeature and leave method parameters then I get "No injection source found for a parameter of type..."如果我注释掉 MultiPartFeature 并保留方法参数,那么我会得到“No injection source found for a parameter of a parameter...”

It deploys fine don't see enything wrong in logs.它部署得很好,在日志中看不到任何错误。

I put it in github repo if you want to reproduce.如果你想复制,我把它放在github repo中。

You need also add yours resources classes (annotated with @Path )您还需要添加您的资源类(用@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;
    }
}

EDIT: But I found better solution: Create class like this编辑:但我找到了更好的解决方案:像这样创建 class

@Provider
public class MultiPartFeatureProvider extends MultiPartFeature {
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM