2017-03-26 5 views
0

Ich versuche derzeit (HTTP put) einfache Daten zu meinem Spring-Server zu setzen, aber ich kann es nicht über Javascript Fetch funktionieren. Es zurückkehren folgende Fehlermeldung:JS Holen zu Spring> Erforderliche Anfrage Körper fehlt

"status" : 400, 
"error" : "Bad Request", 
"exception" : "org.springframework.http.converter.HttpMessageNotReadableException", 
"message" : "Required request body is missing: public java.lang.String org.mypackage.security.controller.fcm.FCMController.saveFCMToken(javax.servlet.http.HttpServletRequest,java.lang.String)" 

Mein JS-Code:

saveTokenToDB(token){ 
     fetch(Constants.server_endpoint + "/savefcmtoken", { 
      method: 'PUT', 
      headers: { 
       'Content-Type': 'application/json', 
       'Authorization': Constants.token 
      }, 
      data: JSON.stringify({token:token}) 
     }) 
      .then(response => { 
       console.log("saveTokenToDB response: " + response._bodyText); 
      }) 
      .catch((error) => console.log(" ERROR > saveTokenToDB: " + error.message)) 
    } 

Und der Frühling Methode:

@RequestMapping(value = "/savefcmtoken", consumes = "application/json", method = RequestMethod.PUT) 
public @ResponseBody 
String saveFCMToken(HttpServletRequest request, @RequestBody String data){ 
    JwtUser user = (JwtUser) getUser(request); 
    FCMData dataObj = new Gson().fromJson(data, FCMData.class); 
    fcmTokenService.insertIfNotExists(new FCMToken((int)user.getId(),dataObj.getToken())); 
    return "OK"; 
} 

Ich weiß, es sollte auf Server-Seite in Ordnung sein, denn ich bin in der Lage zu Führen Sie die Anfrage in Postman korrekt aus, aber wenn Sie das über die Fetch-Methode machen ... nun, Sie haben den Fehler gesehen. Was muss ich hier konfigurieren, damit der Abruf funktioniert?

Antwort

3

Je nach Fetch-API sollte JSON als body, nicht data gesendet werden. Und auch Header sollten mit new Headers() gesendet werden. Versuchen Sie, sie zu reparieren:

saveTokenToDB(token){ 
     fetch(Constants.server_endpoint + "/savefcmtoken", { 
      method: 'PUT', 
      headers: new Headers({ 
       'Content-Type': 'application/json', 
       'Authorization': Constants.token 
      }), 
      body: JSON.stringify({token:token}) 
     }) 
      .then(response => { 
       console.log("saveTokenToDB response: " + response._bodyText); 
      }) 
      .catch((error) => console.log(" ERROR > saveTokenToDB: " + error.message)) 
    } 
+0

kann nicht glauben, dass ich das verpasste ... – Medardas

Verwandte Themen