Spring: JSON data and file in the same request
我知道如何创建使用
1 2 3 4 5 6 7 | @POST @Path("somepath") @Consumes(MediaType.MULTIPART_FORM_DATA) public Response uploadFileAndJSON(@RequestBody SomeModel someModel, @FormDataParam("file") FormDataBodyPart bodyPart) { return null; } |
现在,如果我在下面的邮差请求的"原始"选项卡上添加一些JSON数据,我将获取
。
为什么要同时使用Spring和Jersey注释?您应该坚持使用框架的注释。既然您使用的是泽西,那么应该坚持使用它的注释。
下面是关于当前代码和环境的一些考虑事项。
您可以将JSON作为多部分主体的一部分。为此,您还应在
1 2 3 4 5 6 7 | @POST @Path("somepath") @Consumes(MediaType.MULTIPART_FORM_DATA) public Response uploadFileAndJSON( @FormDataParam("model") SomeModel someModel, @FormDataParam("file") FormDataBodyPart bodyPart) { } |
号
在Jersey配置中,您需要确保注册
现在是邮递员的问题。你可以在这里看到类似的问题。问题是,没有为JSON主体部分设置
1 2 3 4 5 6 7 8 9 10 | --AaB03x Content-Disposition: form-data; name="model" {"some":"model","data":"blah"} --AaB03x Content-Disposition: form-data; name="file"; filename="file1.txt" Content-Type: text/plain ... contents of file1.txt ... --AaB03x-- |
如果你点击邮差中的preview按钮,你实际上可以看到尸体。问题是,正如你在
如果您查看上面的链接,我建议您可以使用
在任何情况下,为了让Jersey能够知道将其反序列化为JSON,必须设置
不要在Postman中将
更新
因此,操作人员能够找到一种方法将
1 2 3 4 5 6 7 8 | @POST @Path("somepath") @Consumes(MediaType.MULTIPART_FORM_DATA) public Response uploadFileAndJSON(@FormDataParam("model") FormDataBodyPart jsonPart, @FormDataParam("file") FormDataBodyPart bodyPart) { jsonPart.setMediaType(MediaType.APPLICATION_JSON_TYPE); SomeModel model = jsonPart.getValueAs(SomeModel.class); } |
。
是的,您可以将其作为多部分表单数据。
在安古拉吉斯你会得到这样的结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | $scope.uploadFile = function () { var file = $scope.selectedFile[0]; $scope.upload = $upload.upload({ url: 'api/upload', method: 'POST', data: angular.toJson($scope.model), file: file }).progress(function (evt) { $scope.uploadProgress = parseInt(100.0 * evt.loaded / evt.total, 10); }).success(function (data) { //do something }); }; $scope.onFileSelect = function ($files) { $scope.uploadProgress = 0; $scope.selectedFile = $files; }; public Response uploadFileAndJSON(@RequestParam("data") String data, @MultiPartFile("file")File file) { you can data as form data and convert it like you want to your object using Gson jar. return null; } |
请看一下AngularJS代码:AngularJS如何上传多部分表单数据和文件?
RESTFul Webservice: File Upload with Jersey