关于java:REST API设计在同一请求中将JSON数据和文件发送到api

REST API Design sending JSON data and a file to the api in same request

我正在现有应用程序之上创建一个RESTAPI。其中一个特性接受JSON数据以及用户上传的文件。

我不确定如何将同一请求中的文件和JSON数据发送到RESTAPI?

我让JSON部件工作,并使用curl测试:

1
2
3
4
5
curl -XPOST http://localhost:8080/myapp/foo -d '{"mydata": {
   "name":"somename",
   "gender":"male"
}}'
//I would like to send an image (say, profile image) with the above request as well.

我使用的是Grails应用程序,所以我在控制器中得到这些数据,就像这样:new Foo(params.mydata)

问题

  • 是否可以向API发送相同请求中的JSON数据和文件?如果是这样,如何使用curl或rest控制台(chrome扩展)
  • 这个请求的contentType是什么?
  • 如果这意味着我可以在同一个请求中发送文件和其他数据(字符串),那么我可以使用其他格式发送数据。我没有绑在JSON上

更新

我发现了另一个同样的问题。从这个问题的答案来看,似乎只有三个选择,没有一个选择可以在同一个请求中同时发送JSON数据和文件。这是非常令人沮丧的…我将保持这个问题的开放,看看是否有人有其他的想法。


我认为这样做的"正确"方法是使用多部分消息。这样,您就可以使用相应的正确mime类型发布JSON和图像。维基百科关于多部分mime类型的文章提供了一个例子,说明了这一点。看起来ApacheHTTPCommons和Jersey都支持这种方式,显然curl也支持这种方式!