可以同时使用JSON和Multipart Form的REST服务

Iri*_*nik 6 java rest json spring-mvc

我需要在Spring MVC中创建一个可以处理JSON和Multipart Form请求的方法.

这是我方法的签名:

@RequestMapping(value = { "/upload_image" }, method = RequestMethod.POST)
public @ResponseBody void uploadImage(final ImageDTO image) 
Run Code Online (Sandbox Code Playgroud)

ImageDTO类如下所示:

public class ImageDTO {
  private String imageUrl;
  private Long imageId;
  private MultipartFile image;

  public String getImageUrl() {
    return imageUrl;
  }

  public void setImageUrl(final String url) {
    this.imageUrl = url;
  }

  public Long getImageId() {
    return imageId;
  }

  public void setImageId(final Long imageId) {
    this.imageId = imageId;
  }

  public MultipartFile getImage() {
    return image;
  }

  public void setImage(MultipartFile image) {
    this.image = image;
  }
}
Run Code Online (Sandbox Code Playgroud)

所以场景是我需要支持两种情况:1.从表单加载图像,其中Content-Type是多部分形式(所有DTO成员都不为空)2.使用JSON进行图像上传,仅使用imageUrl.在这种情况下,请求正文如下所示:

{
    "imageId":"1236",
    "imageUrl":"http://some.image.url",
    "image":null
}
Run Code Online (Sandbox Code Playgroud)

当前实现很好地处理了多部分请求,但是在发送JSON时,ImageDTO对象在其所有成员中都包含NULL.

是否可以使相同的方法处理两种内容类型?

谢谢.

sha*_*zin 1

要接收 JSON,您需要将ImageDTO参数标记为@RequestBody

@RequestMapping(value = { "/upload_image" }, method = RequestMethod.POST)
public @ResponseBody void uploadImage(final @RequestBody ImageDTO image) 
Run Code Online (Sandbox Code Playgroud)

  • 是的,你不能直接这样做。 (2认同)