gpt4 book ai didi

java - Amdatu 多部分表单 @FormParam 始终为 null

转载 作者:行者123 更新时间:2023-12-01 17:16:38 24 4
gpt4 key购买 nike

因此,我在 Felix 框架内使用 Amdatu 来创建支持 OSGi 的 JSON Rest 服务。

当我使用@GET时,我得到了预期的id值

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("file")
public String getFile(@QueryParam("id") String id) {
System.out.println("id : "+id);
return null;
}

当我使用 @POST FormParam 始终为 null

@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("file")
public String getFile(@FormParam("id") String id) {
System.out.println("id : "+id);
return null;
}

当我使用 @POST 但使用应用程序 JSON 时,我总是获得整个原始 json 而不是值。

我关注了这个视频:http://www.amdatu.org/howto/createwebapp.html

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Path("file")
public String getFile(String id) throws Exception {
return id
}

我正在使用 Chrome 的高级 Rest 客户端插件来测试该服务。

使用库

org.amdatu.web.rest.jaxrs:1.0.4
org.amdatu.web.rest.wink:1.0.8
jackson-jaxrs:1.9.13
jackson-mapper-asl:1.9.13
jackson-core-asl:1.9.13

更新:

我将我的 Maven 包中的依赖项设置为“提供”,方法是将它们更改为“编译” MediaType.APPLICATION_FORM_URLENCODED 现在可以工作。

但是 MediaType.MULTIPART_FORM_DATA 仍然没有。

在表单发布期间,我的标题是:

Content-Type: multipart/form-data

如果我删除@FormParam,那么id将填充:

id : --ARCFormBoundary5xbnwa6as8aor
Content-Disposition: form-data; name="id"

9
--ARCFormBoundary5xbnwa6as8aor--

当我添加@FormParam时,该值为null。

最佳答案

JAX-RS 规范没有说明如何处理 multipart/form-data。不同的 JAX-RS 实现有自己专有的方法来处理这个问题。据我所知,Apache Wink(我们构建于其之上)不支持@FormParam 的多部分。 Wink 中似乎确实有一些支持多部分的类型: http://wink.apache.org/documentation/1.1.1/html/7.8%20MultiPart.html但这些类并未由 Amdatu Wink bundle 公开,而且我也从未尝试过使用它。

我自己使用的解决方法是下面的示例。当使用 multipart 与其他表单字段一起上传文件时,这非常有用(这就是大多数使用 multipart 的原因)。我使用 Apache File Upload 来解析请求并访问上传的文件和表单字段。

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void test(@Context HttpServletRequest request) {
ServletFileUpload uploader = new ServletFileUpload(new DiskFileItemFactory());
try {
List<FileItem> parseRequest = uploader.parseRequest(request);
for (FileItem fileItem : parseRequest) {
if (fileItem.isFormField()) {
System.out.println(fileItem.getFieldName() + ": "
+ fileItem.getString());
}

}
} catch (FileUploadException e) {
e.printStackTrace();
}
}

关于java - Amdatu 多部分表单 @FormParam 始终为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21643724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com