必需的字符串参数' text'不在场

时间:2017-06-23 20:20:25

标签: javascript java angularjs spring-mvc spring-boot

我试图从我的视图中向我的控制器发送一个字符串,但我不断收到错误" 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);
    }

2 个答案:

答案 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

查看RequestBody and RequestParam

之间的区别