Javascript AngularJS$http POST在Java控制器后端作为空变量接收
我希望从AngularJS发送数据,以便稍后在Python+Java后端使用它。问题是它被发送为null,我不知道为什么。google chrome的控制台上没有错误,但我可以在java服务器控制台mvn-P dev中看到问题,在这里我使用return查看变量到达时的值: 调试13496-[XNIO-23 task-27]a.c.p.s.aop.logging.LoggingAspect:退出:us.com.generic.web.rest.DataController.getData,结果=变量“null”已保存 Java控制器,从AngularJS获取信息:Javascript AngularJS$http POST在Java控制器后端作为空变量接收,javascript,java,angularjs,Javascript,Java,Angularjs,我希望从AngularJS发送数据,以便稍后在Python+Java后端使用它。问题是它被发送为null,我不知道为什么。google chrome的控制台上没有错误,但我可以在java服务器控制台mvn-P dev中看到问题,在这里我使用return查看变量到达时的值: 调试13496-[XNIO-23 task-27]a.c.p.s.aop.logging.LoggingAspect:退出:us.com.generic.web.rest.DataController.getData,结果=变
@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');
}
}
您正在请求主体中以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";
}
如果您在控制器中使用RequestParam,但您在POST请求的正文中发送数据,那么这应该会起作用
RequestParam用于URL中的一个参数,例如/api/data?dataVariable=HeadStreet,但您需要使用@RequestBody读取消息体,如下所示
@RestController
@RequestMapping("/api")
public class DataController {
@RequestMapping("/data/")
@ResponseStatus(code = HttpStatus.OK)
public @ResponseBody String getData(@RequestBody YourDTO yourDTO) String dataVariable) {
return "The variable '" + yourDTO.dataVariable + "' was saved";
}
}
以及相应的数据传输对象类
class YourDTO {
public String dataVariable;
}
我对Spring一无所知,但似乎您的代码读取的是GET-params,而不是POST-params。作为快速检查,请尝试使用URI+“api/data/?dataVariable=HeadStreet”快速查明这是否是问题所在。您还可以在浏览器控制台中检查您的请求发送的客户端btw