我在使用Ajax将json数据发送到控制器时遇到问题。
我认为我发送的数据很好,但是我收到以下警告。
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver-已解决[org.springframework.web.bind.MissingServletRequestParameterException:所需的int参数'bno'不存在”
code:400 message:HTTP Status 400 – Bad Requesth1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} h2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} h3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} body {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} b {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} p {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;} a {color:black;} a.name {color:black;} .line {height:1px;background-color:#525D76;border:none;}HTTP Status 400 – Bad Request
Type Status Report
Message Required int parameter 'bno' is not present
Description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
Apache Tomcat/8.5.34
我将显示我的Ajax代码
var headers = {"Content-Type" : "application/json"
,"X-HTTP-Method-Override" : "DELETE"
};
$.ajax({
url: root+"/restcmt/"+uid+"/"+cno
, headers: headers
, type: 'DELETE'
, data : JSON.stringify({"bno":bno})
, beforeSend : function(xhr){
xhr.setRequestHeader(_csrf_name, _csrf_token);
}
, success: function(result){
showcmtlist(bno);
}
, error: function(request,status,error){
console.log("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
}
});
还有我的控制器
@RequestMapping(value="/{uid}/{cno}", method=RequestMethod.DELETE)
public void deletecmt(@PathVariable int cno ,@PathVariable String uid,@RequestParam int bno
,@AuthenticationPrincipal SecurityCustomUser securityCustomUser) throws Exception{
}
并请求有效载荷
{"bno":14}
我不确定这是怎么回事。 怎么了?
答案 0 :(得分:3)
{"bno": bno}
在请求的正文中。因此,您的Controller方法应为@RequestBody int bno
。 @RequestParam
用于servlet请求参数。即:/uid/cno?bno=14
参考差异:What is difference between @RequestBody and @RequestParam?
答案 1 :(得分:1)
在春季世界中,请求有效负载应对应于@RequestBody,例如:
public SomethingElse updateValue(@RequestBody Something value) {
// ...
}
“东西”是任何POJO。
要使用@RequestParam,请参阅: https://github.com/jquery/jquery/issues/3269
($。ajax在DELETE正文中发送data
属性,而不是查询字符串)