javascript - AngularJS $http POST 在 Java 控制器后端作为空变量接收
问题描述
我希望从 AngularJS 发送数据,以便稍后在 Python+Java 后端使用它。问题是它被发送为空,我不知道为什么。谷歌浏览器的控制台没有错误,但我可以在我的 java 服务器控制台(mvn -P dev)中看到问题,我使用 return 来查看到达时变量的值是什么:
调试 13496 --- [XNIO-23 task-27] acpsaop.logging.LoggingAspect:退出:us.com.generic.web.rest.DataController.getData() 结果 = 变量“null”已保存
Java 控制器,从 AngularJS 获取信息:
@RestController
@RequestMapping("/api")
public class DataController {
@RequestMapping("/data/")
@ResponseStatus(code = HttpStatus.OK)
public @ResponseBody String getData( @RequestParam(name="dataVariable", required=false) String dataVariable) {
return "The variable '" + dataVariable + "' was saved";
}
}
AngularJS 控制器:
angular
.module('Generic')
.controller('DataController', DataController);
DataController.$inject = ['$scope', '$http', 'URI', '$timeout'];
function DataController ($scope, $http, URI, $timeout) {
var myInformation = 'HeadStreet';
$http.post(URI + 'api/data/', {
dataVariable: myInformation
}, {
withCredentials: true,
headers: {
'Content-Type': 'charset=utf-8'
}
}).then(Success, Error);
}
function Success() {
alert('Variable sent');
}
function Error() {
alert('Issue while sending data');
}
}
解决方案
您将 dataVariable 作为 json 发布在请求的正文中。@RequestParam 从查询参数中读取。
如果你想在正文中发布数据,你应该使用@RequestBody
你需要像下面这样创建一个 POJO 类
public class GetDataRequest{
public String dataVariable;
}
然后在你的控制器中
@RequestMapping("/data/")
@ResponseStatus(code = HttpStatus.OK)
public @ResponseBody String getData( @RequestBody GetDataRequest request) {
return "The variable '" + request.dataVariable + "' was saved";
}
这应该工作
推荐阅读
- routes - 为什么我在此处地图的路由 api v8 中检索计算的矩阵时得到无效的矩阵 id?
- javascript - 如何通过数组中的键计算相同对象的数量?
- python - 为什么dash不在服务器上工作,但在jupyter上工作?
- javascript - 如何根据特定坐标使地图居中
- android - 未解决的参考:bundleOf
- java - 在鼠标悬停时更改 JButton 属性
- twilio - Zapier Twilio 集成非常缓慢。有没有办法用 Zapier 过滤并用 Twilio 毫不延迟地发送短信?
- flutter - 单元测试 GetxController
- webrtc - 简单对等不同网络调用问题
- python - 正则表达式 .*(\d+x\d+)$ 必须是贪心的