Javascript 必需的字符串参数';文本';不在场

Javascript 必需的字符串参数';文本';不在场,javascript,java,angularjs,spring-mvc,spring-boot,Javascript,Java,Angularjs,Spring Mvc,Spring Boot,我试图将一个字符串从我的视图发送到我的控制器,但我一直得到一个错误,即“文本”不存在 这是我的javascript $scope.sendMsg = function(){ console.log($scope.my.message); data = {"text" : $scope.my.message}; $http({ method:'POST', data:data,

我试图将一个字符串从我的视图发送到我的控制器,但我一直得到一个错误,即“文本”不存在

这是我的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);
    }
@RequestMapping(value=“/post stuff”,method=RequestMethod.post,products=MediaType.APPLICATION\u JSON\u value,consumes=MediaType.APPLICATION\u JSON\u value)
@应答器
公共响应postStuff(@RequestParam(value=“text”)字符串文本){
System.out.println(文本);
返回新的ResponseEntity(stuff.postTextContent(text),HttpStatus.OK);
}

不确定Spring是否有办法将json
{“text”:“some text”}
反译为原始字符串
“some text”
。但是,
@RequestParam
用于URL中的参数(
http://foo.com/post-stuff?text=text+此处

POST
ed数据在正文中发送,因此您需要使用
@RequestBody
注释。由于body是一个更复杂的类型,我会使用一个类,它可以很容易地提取值:

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);
}
静态类TextHolder{
私有字符串文本;//<名称很重要
//省略getter+setter
}
public ResponseEntity postStuff(@RequestBody TextHolder text){
System.out.println(text.getText());
返回新的ResponseEntity(stuff.postTextContent(text.getText()),HttpStatus.OK);
}

您可以尝试将当前
数据的前端更改为:

data = {params:{"text" : $scope.my.message}};
Spring需要知道请求有参数

或者,您可以尝试将控制器
@RequestParam(value=“text”)字符串文本中的后端更改为
@RequestBody字符串文本


检查

之间的差异。在发送从查询参数中提取的
@RequestParam
值之前,请尝试对数据进行字符串化。你没有<代码>数据
是主体,如json。谢谢。我把它改成@requestbody