首页 > Java > java教程 > 如何在 Jersey RESTful Web 服务中上传带有附加 JSON 数据的文件?

如何在 Jersey RESTful Web 服务中上传带有附加 JSON 数据的文件?

DDD
发布: 2024-12-03 07:34:09
原创
434 人浏览过

How to Upload Files with Additional JSON Data in a Jersey RESTful Web Service?

Jersey RESTful Web 服务中的附加数据文件上传

要在单个 REST 调用中实现文件上传以及其他对象数据,请修改uploadFileWithData 方法如下:

@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") String employeeJson) {

    // Deserialize the employee data from JSON
    JacksonJsonProvider provider = new JacksonJsonProvider();
    Employee emp = provider.readFrom(Employee.class, employeeJson);

    // ...business logic...
}
登录后复制

Key要点:

  • 不要使用 Employee 对象,而是以原始 JSON 字符串(String employeeJson)的形式接收员工数据。
  • 使用 Jackson 的 JacksonJsonProvider 将 JSON 字符串反序列化为Employee 对象。
  • 确保提供者已在您的 JAX-RS 中注册

Postman 故障排除:

Postman 可能不会自动为各个身体部位设置 Content-Types。要解决此问题:

  1. 在 Postman 编辑器中打开请求正文。
  2. 右键单击“emp”部分,然后选择“编辑”或“添加标头”。
  3. 将 Content-Type 设置为 application/json。

替代解决方案:

或者,您可以在 REST 方法中显式设置 Content-Type:

@POST
@Path("/upload2")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFileAndJSON(
        @FormDataParam("emp") FormDataBodyPart jsonPart,
        @FormDataParam("file") FormDataBodyPart bodyPart) {

    jsonPart.setMediaType(MediaType.APPLICATION_JSON_TYPE);
    Employee emp = jsonPart.getValueAs(Employee.class);

    // ...business logic...
}
登录后复制

注意:

如果您使用的连接器与 HttpUrlConnection 不同,您可能会遇到相关评论中讨论的问题。

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

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