问题:
任务是创建一个员工在单个 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(); }
此测试创建一个包含图像和员工数据的多部分请求。
注意事项:
以上是如何在 Jersey RESTful Web 服务中上传带有嵌入实体数据的文件?的详细内容。更多信息请关注PHP中文网其他相关文章!