我试图从我的视图中向我的控制器发送一个字符串,但我不断收到错误" text"不在场。
这是我的javascript
$scope.sendMsg = function(){
console.log($scope.my.message);
data = {"text" : $scope.my.message};
$http({
method:'POST',
data:data,
contentType: "application/json; charset=utf-8",
dataType:"json",
url:'/post-stuff'
}).then(function(response){
console.log(response);
});
}
我的休息控制器:
@RequestMapping(value= "/post-stuff", method=RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<PostTextResult> postStuff(@RequestParam(value= "text") String text){
System.out.println(text);
return new ResponseEntity<PostTextResult>(stuff.postTextContent(text), HttpStatus.OK);
}
答案 0 :(得分:1)
不确定Spring是否可以将jj {"text" : "some text"}
转换为原始字符串"some text"
。但是,@RequestParam
用于网址(http://foo.com/post-stuff?text=text+here
)中的参数。
POST
ed数据在正文中发送,因此您需要使用@RequestBody
注释。由于正文是一个更复杂的类型,我使用的类可以很容易地提取值:
static class TextHolder {
private String text; // < name matters
// getter+setter omitted
}
public ResponseEntity<PostTextResult> postStuff(@RequestBody TextHolder text) {
System.out.println(text.getText());
return new ResponseEntity<PostTextResult>(stuff.postTextContent(text.getText()), HttpStatus.OK);
}
答案 1 :(得分:1)
您可以尝试将当前data
的前端更改为:
data = {params:{"text" : $scope.my.message}};
Spring需要知道请求有参数。
或者您可以尝试将控制器@RequestParam(value= "text") String text
中的后端更改为@RequestBody String text