Payara / Glassfish JAX-RS multipart

问题描述 投票:0回答:1

我正在尝试在paraya上设置jax-rs multipart端点(我想与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 [email protected] 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和method字段,则端点正在工作,但无法获取已发布的字段。如果我注释掉MultiPartFeature并保留方法参数,那么我将得到“找不到类型为...的参数的注入源”

它部署良好,在日志中看不到任何错误。

如果要复制,我将其放在github repo中。

java java-ee jersey payara
1个回答
0
投票

您还需要添加资源类(用@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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.