首页 > Java > java教程 > 如何在 Jersey RESTful Web 服务中上传带有嵌入实体数据的文件?

如何在 Jersey RESTful Web 服务中上传带有嵌入实体数据的文件?

Patricia Arquette
发布: 2024-12-05 14:10:14
原创
822 人浏览过

How to Upload Files with Embedded Entity Data in a Jersey RESTful Web Service?

在 Jersey RESTful Web 服务中使用实体数据上传文件

问题:

任务是创建一个员工在单个 REST 调用中上传相应图像时进行记录。目标是以无缝且高效的方式实现此功能。

解决方案:

为了实现此目标,重要的是要了解拥有多个内容- 不支持同一请求中的类型。相反,员工数据应作为多部分请求的一部分包含在内。

以下代码片段说明了如何实现此目的:

@POST
@Path("/upload2")
@Consumes({MediaType.MULTIPART_FORM_DATA, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response uploadFileWithData(
    @FormDataParam("file") InputStream fileInputStream,
    @FormDataParam("file") FormDataContentDisposition contentDispositionHeader,
    @FormDataParam("emp") Employee emp) {

    // Business logic

}
登录后复制

此处,@FormDataParam("emp")注释有助于从多部分请求中提取员工数据。此外,应使用适当的 getter 和 setter 方法定义 Employee 类。

多部分测试:

要测试多部分功能,可以使用 MultiPartFeature 类进行注册Jersey 客户端使用 register(MultiPartFeature.class)。例如,可以使用以下测试片段:

@Test
public void testGetIt() throws Exception {
    
    final Client client = ClientBuilder.newBuilder()
        .register(MultiPartFeature.class)
        .build();
    WebTarget t = client.target(Main.BASE_URI).path("multipart").path("upload2");

    FileDataBodyPart filePart = new FileDataBodyPart("file", 
                                             new File("stackoverflow.png"));
    String empPartJson
            = "{ ... employee data as JSON ... }";

    MultiPart multipartEntity = new FormDataMultiPart()
            .field("emp", empPartJson, MediaType.APPLICATION_JSON_TYPE)
            .bodyPart(filePart);
          
    Response response = t.request().post(
            Entity.entity(multipartEntity, multipartEntity.getMediaType()));
    System.out.println(response.getStatus());
    System.out.println(response.readEntity(String.class));

    response.close();
}
登录后复制

此测试创建一个包含图像和员工数据的多部分请求。

注意事项:

  • 某些客户端(例如 Postman)可能不允许设置单独的正文部分内容类型。但是,您可以在反序列化数据之前使用 jsonPart.setMediaType(MediaType.APPLICATION_JSON_TYPE); 显式设置 Content-Type。
  • 或者,您可以使用 String 参数并使用 JSON 库手动反序列化 JSON 数据.

以上是如何在 Jersey RESTful Web 服务中上传带有嵌入实体数据的文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板