我正在尝试在 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/