2017-06-23 4 views
1

Ich versuche, eine Zeichenfolge aus meiner Sicht zu meinem Controller zu senden, aber ich bekomme immer den Fehler, dass "Text" nicht vorhanden ist.Erforderlich Zeichenfolge Parameter 'Text' ist nicht vorhanden

das ist mein 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); 
     });  
    } 

Mein Rest-Controller:

@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

Versuchen Sie, die Daten stringifying bevor Sie – Vivz

+0

A '@ RequestParam' Wert senden extrahiert aus Abfrageparametern. Du hast keine. "Daten" ist der Körper, wie JSON. –

Antwort

1

Sie können versuchen, im Frontend in Ihrem aktuellen data zu ändern:

data = {params:{"text" : $scope.my.message}}; 

Spring muss wissen, dass die Anfrage Parameter hat.

Oder Sie können versuchen die @RequestParam(value= "text") String text-@RequestBody String text in Ihrem Controller in Backend zu ändern

Schauen Sie sich die Differenz zwischen RequestBody and RequestParam

+0

Danke. Ich änderte es zu @ requestbody – joejoeso

1

Nicht sicher, ob eine Möglichkeit besteht, dass Frühling "some text"{"text" : "some text"} in die rohen String-json tun kann. @RequestParam wird jedoch für Parameter innerhalb von URLs verwendet (http://foo.com/post-stuff?text=text+here).

POST Ed-Daten werden im Text gesendet, daher müssen Sie die @RequestBody Annotation verwenden. Und da der Körper ein komplexer Typ ist, würde ich eine Klasse, die es einfach macht, den Wert zu extrahieren:

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); 
} 
Verwandte Themen