我在角度和控制器中有一个$ http函数,但是控制器在日志打印中不检索从角度发送的数据
跳过CORS处理:响应已包含 "访问控制允许来源"头
我已将web.xml
文件中的过滤器配置为标题
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, x-requested-with");
我的角度函数是这个
app.controller('LoadCardController', function($scope, $http) {
$scope.executor = function() {
var person = {
name : 'Prueba',
todayDate : 1469679969827
};
console.log("DATA=> ", data);
$http({
method : 'POST',
url : 'http://localhost/myWeb/addPerson',
data : person,
headers : {
'Content-Type' : 'application/json'
}
}).then(function successCallback(response) {
console.log("success");
console.log(response);
}, function errorCallback(response) {
console.log("error");
console.log(response);
});
}
});
我的控制器就是这个......
@ResponseBody
@RequestMapping(path = "/addPerson", method = RequestMethod.POST)
public Person addPerson(final Person person) throws CustomException {
person.setAge("18");
person.setBithDay("15");
LOGGER.trace("Add person with data {}", person);
return person;
}
});
}
当进入控制器时,person的数据为null,为name和todayDate属性,由我以角度发送。
我的控制器现在非常简单,因为只返回同一个人对象
答案 0 :(得分:0)
根据您在此处显示的内容,似乎请求正在进行,但数据未在Spring控制器方法中的person
参数上进行。可能有几个不同的原因。
首先,可能是请求体未被映射到Spring控制器方法的person
参数。您可以通过在method参数之前使用@RequestBody
注释(详细信息here)来告诉Spring自动执行此操作。在您的示例中:
@ResponseBody
@RequestMapping(path = "/addPerson", method = RequestMethod.POST)
public Person addPerson(@RequestBody Person person) throws CustomException {
person.setAge("18");
person.setBithDay("15");
LOGGER.trace("Add person with data {}", person);
return person;
}
如果这不能解决问题,则可能是Person
类的问题。至少,它需要:
public class Person {
private String name;
private String age;
private String bithday;
private Date todayDate;
public Person() {
// this depends how your serialization is set up
}
// getters and setters...
}
一种惯例是使用单独的数据传输对象类(即PersonDto
),它从请求主体获取数据并使用它构建Person
对象(反之亦然),这样您就可以控制提交如何映射到后端。有关该模式的更多信息here。
答案 1 :(得分:0)
我会给你一个选择
您的DTO
public class Person {
private String name;
private String todayDate;
private String age;
private String bithDay;
// getter and setters, etc....
AngularJS使用:
// Every properties matches with your DTO, example: name, todayDate looks...
var formData = new FormData();
formData.append("name", 'Prueba');
formData.append("todayDate" , '1469679969827');
console.log("DATA=> ", formData);
$http({
method : 'POST',
url : 'http://localhost/myWeb/addPerson',
data : formData,
headers : {
'Content-Type' : undefined
}
}).then(function successCallback(response) {
console.log("success");
console.log(JSON.stringify(response));
}, function errorCallback(response) {
console.log("error");
console.log(response);
});
根据我的情况,您在浏览器中登录Chrome看起来......
success
myjs.js:1744 {"data":{"name":"Prueba","todayDate":"1469679969827","age":"18","bithDay":"15"},"status":200