这是我的角度js电话
var req = {
method: 'POST',
url: newMessageUrl+"/plain",
headers: {
'Content-Type': "text/plain"
},
data: {'title':'aaaaa'}//$scope.pubmFormModel
};
$http(req).then(function(d){
msgSuccess();
}, function(e){
});
这是我的要求
Request Header
Accept:application/json, text/plain, */*
Content-Type:text/plain
Origin:file://
Request Pauload
title: "aaaaa"
这是我的弹簧处理程序:
@RequestMapping(method = RequestMethod.POST, value = "/newmessage/plain")
public ResponseEntity<?> publishMessage(HttpServletRequest request) throws Exception
{
如果我request.getParameter("title")
null
答案 0 :(得分:1)
data: {'title':'aaaaa'}
表示:将此JavaScript对象转换为JSON,并将结果作为请求的主体发送。
要在服务器上访问它,您需要读取请求主体,将JSON解析为Map或Java对象,并提取对象的title属性。
为了能够将标题作为请求参数获取,您需要使用application/x-www-form-urlencoded
内容类型,并将字符串'title=aaaaa'
作为请求的主体发送。
答案 1 :(得分:0)
如果要将其作为请求参数获取,则需要将其作为请求参数而不是请求体传递。
var req = {
method: 'POST',
url: newMessageUrl+"/plain?title=aaaa",
headers: {
'Content-Type': "text/plain"
},
data: {}
};
$http(req).then(function(d){
msgSuccess();
}, function(e){
});
如果有更多属性,更好的方法是将其作为请求主体发送。有更多理由使用requestBody,例如JSR验证等。
您的原始JS代码保持不变:
var req = {
method: 'POST',
url: newMessageUrl+"/plain",
headers: {
'Content-Type': "text/plain"
},
data: {'title':'aaaaa'}//$scope.pubmFormModel
};
$http(req).then(function(d){
msgSuccess();
}, function(e){
});
但是你的Controller代码应该被修改:
@RequestMapping(method = RequestMethod.POST, value = "/newmessage/plain")
public ResponseEntity<?> publishMessage(@RequestBody User user) {
log.info("title - "+user.getTitle())
}
public class User implements Serializable{
private String title;
//getter & setters
}
答案 2 :(得分:0)
如果您正在使用Jquery,则必须将变换器应用于您的请求以由Spring Handler解释。
例如:
var transformer = function (data) {
if (data === undefined) {
return data;
}
return $.param(data);
};
并在您的请求中使用:
var req = {
method: 'POST',
url: newMessageUrl+"/plain?title=aaaa",
headers: {
'Content-Type': "text/plain"
},
data: {},
transformRequest: transformer
};
$http(req).then(function(d){
//Did Something good
}, function(e){
//Did something bad
});