java - Payara/Glassfish JAX-RS 多部分
问题描述
我正在尝试在 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 并保留方法参数,那么我会得到“No injection source found for a parameter of a ...”
它部署得很好,在日志中看不到任何错误。
如果你想复制,我把它放在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 {
}
推荐阅读
- angular - 从Angular中的兄弟组件调用方法和属性?
- mysql - MySql - 为每个用户选择 10 个最佳结果
- node.js - Discord.js:如何让机器人 DM 成为服务器中的所有成员?
- java - 为什么 Stream.mapToInt 不处理 NullPointerExceptions?
- reactjs - 无法从存储中读取数据
- amazon-web-services - 如何在aws上存储我的加密密钥?
- google-cloud-firestore - Cloud Firestore 为额外敏感的用户数据拆分访问级别
- mongodb - Golang MongoDB 在列表上使用 $in 运算符 - 结果参数必须是切片地址
- python - 带有英语和希伯来语单元格的 python read_excel
- java - 在接口初始化期间获取 NullPointerException