JS Fetch to Spring > 缺少必需的请求正文
JS Fetch to Spring > Required request body is missing
我目前正在尝试将(HTTP 放置)简单数据放到我的 Spring 服务器上,但是我无法通过 Javascript Fetch 让它工作。它 return 以下错误:
"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)"
我的 JS 代码:
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) )
}
和spring方法:
@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";
}
我知道在服务器端应该没问题,因为我能够在 Postman 中正确地执行请求,但是当通过 fetch 方法执行时...你看到了错误。我必须在这里配置什么才能使提取工作?
根据 fetch API,json 应该作为 body
发送,而不是 data
。 headers 也应与 new Headers()
一起发送。尝试修复它们:
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) )
}
我目前正在尝试将(HTTP 放置)简单数据放到我的 Spring 服务器上,但是我无法通过 Javascript Fetch 让它工作。它 return 以下错误:
"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)"
我的 JS 代码:
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) )
}
和spring方法:
@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";
}
我知道在服务器端应该没问题,因为我能够在 Postman 中正确地执行请求,但是当通过 fetch 方法执行时...你看到了错误。我必须在这里配置什么才能使提取工作?
根据 fetch API,json 应该作为 body
发送,而不是 data
。 headers 也应与 new Headers()
一起发送。尝试修复它们:
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) )
}