如何使用AngularJS发送POST请求?JSON部分是必需的,但文件不是必需的。我已经根据其他博客文章尝试过此方法,但是它不起作用。我收到一个 错误的请求400错误 。
200点正确答案将被添加
var test = { description:"Test", status: "REJECTED" }; var fd = new FormData(); fd.append('data', angular.toJson(test)); return $http.post('/servers', fd, { transformRequest: angular.identity, headers: { 'Content-Type': undefined } });
我已经用一个简单的Spring后端测试了您的代码,并且工作正常:
@Controller public class FileController { @ResponseBody @RequestMapping(value = "/data/fileupload", method = RequestMethod.POST) public String postFile(@RequestParam(value="file", required=false) MultipartFile file, @RequestParam(value="data") Object data) throws Exception { System.out.println("data = " + data); return "OK!"; } }
我已将您的客户端代码与angular v1.1.5一起使用:
var test = { description:"Test", status: "REJECTED" }; var fd = new FormData(); fd.append('data', angular.toJson(test)); //remove comment to append a file to the request //var oBlob = new Blob(['test'], { type: "text/plain"}); //fd.append("file", oBlob,'test.txt'); return $http.post('/data/fileupload', fd, { transformRequest: angular.identity, headers: { 'Content-Type': undefined } });
请求看起来像这样(从Chrome控制台的“网络”标签中复制):
Request URL:http://localhost:8080/data/fileupload Request Method:POST Status Code:200 OK Request Headers POST /data/fileupload HTTP/1.1 Host: localhost:8080 ... Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryEGiRWBFzWY6xwelb Referer: http://localhost:8080/ ... Request Payload ------WebKitFormBoundaryEGiRWBFzWY6xwelb Content-Disposition: form-data; name="data" {"description":"Test","status":"REJECTED"} ------WebKitFormBoundaryEGiRWBFzWY6xwelb--
响应200 OK,控制台将输出预期的结果: {"description":"Test","status":"REJECTED"}
{"description":"Test","status":"REJECTED"}