我正在使用angularjs开发Spring应用程序。 我正在尝试从angularjs将JSON对象作为RequestBody和RequestParam信息发送到spring控制器,但是spring控制器 无法识别从angularjs发送的请求。
js:
(function () {
'use strict';
var myApp = angular.module('app');
myApp.controller('fileWithJSONController', function ($scope, fileUploadService) {
$scope.uploadFile = function () {
var file = $scope.myFile;
var uploadUrl = myApplnURL + '/showInfo/getInformationTest';", //Url of web service
$scope.emailData = [
{ 'from':$scope.fromEmail,
'ccEmail': $scope.ccEmail,
'subject': $scope.subject,
'message':$scope.message,
}
];
var fd=new FormData();
angular.forEach($scope.files,function(file){
fd.append('file',file);
});
promise = fileWithJSONService.sendInformation(fd, $scope.emailData, uploadUrl);
promise.then(function (response) {
$scope.serverResponse = response;
}, function () {
$scope.serverResponse = 'An error has occurred';
})
};
});
})();
(function () {
'use strict';
var myApp = angular.module('app');
myApp.service('fileWithJSONService', function ($http, $q) {
this.sendInformation = function (fd, emailData, uploadUrl) {
var deffered = $q.defer();
$http.post(uploadUrl, fd, emailData, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
}).success(function (response) {
deffered.resolve(response);
}).error(function (response) {
deffered.reject(response);
});
return deffered.promise;
}
});
})();
Spring控制器:
@RequestMapping(value = "/getInformationTest", method = RequestMethod.POST, headers = {"content-type=multipart/form-data"})
public
@ResponseBody
String sendInformationTest(@RequestParam("file") List<MultipartFile> multiPartFileList,@RequestBody("emailData") EmailDataDTO emailDataDTO){
System.out.println("In spring controller");
System.out.println("single file " +multiPartFileList.size());
}
-编辑-
PS:弹簧控制器的路径是正确的,因为当我仅将一个参数从angularjs传递给弹簧控制器时,它将击中弹簧控制器。下面的示例代码:
js:
....
$http.post(uploadUrl, fd , {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
})...
弹簧控制器:
@RequestMapping(value = "/getInformationTest", method = RequestMethod.POST, headers = {"content-type=multipart/form-data"})
public
@ResponseBody
String sendInformationTest(@RequestParam("file") List<MultipartFile> multiPartFileList){
System.out.println("In spring controller");
System.out.println("single file " +multiPartFileList.size());
}
o / p:
In spring controller
single File 2
----编辑--- 我尝试按照以下2种方式将RequestBody更改为RequestParam,但是两种方式都无法使用spring控制器。
第一次试用: js:
....
$http.post(uploadUrl, fd ,emailData, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
})...
弹簧控制器:
@RequestMapping(value = "/getInformationTest", method = RequestMethod.POST, headers = {"content-type=multipart/form-data"})
public
@ResponseBody
String sendInformationTest(@RequestParam("file") List<MultipartFile> multiPartFileList,@RequestParam("emailData") List<EmailDataDTO> emailData){
System.out.println("In spring controller");
}
Trial2: js:
..
$scope.emailData = [
{ 'from':$scope.fromEmail,
'ccEmail': $scope.ccEmail,
'subject': $scope.subject,
'message':$scope.message,
}
];
var fd=new FormData();
fd.append("emailData",$scope.emailData);
angular.forEach($scope.files,function(file){
fd.append('file',file);
});
promise = fileWithJSONService.sendInformation(fd, $scope.emailData, uploadUrl);
....
....//service call
$http.post(uploadUrl, fd , {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
})...
-编辑- 我在servlet.xml中配置了CommonsMultipartResolver
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10000000"/>
</bean>
答案 0 :(得分:0)
在服务器中,如果您以JSON形式发送数据,则将headers = {"content-type=multipart/form-data"}
更改为headers = {"content-type=application/json"}
并检查是否启用了CORS。
将您的标头从前端标头:{'Content-Type':undefined}更改为
标头:{'Content-Type':“ content-type = multipart / form-data”}