我在使用 ajax 将 json 数据发送到控制器时遇到问题
Posted
技术标签:
【中文标题】我在使用 ajax 将 json 数据发送到控制器时遇到问题【英文标题】:I have a problem sending json data to a controller with ajax 【发布时间】:2020-01-30 20:07:49 【问题描述】:我在使用 ajax 向控制器发送 json 数据时遇到问题。
我认为我已经很好地发送了数据,但我收到了以下警告。
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - 已解决 [org.springframework.web.bind.MissingServletRequestParameterException: 所需的 int 参数 'bno' 不存在]
代码:400 消息:HTTP 状态 400 – 错误请求 1 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; 。行 height:1px;background-color:#525D76;border:none;HTTP 状态 400 – 错误请求
类型状态报告
消息所需的 int 参数 'bno' 不存在
说明服务器不能或不会处理请求,因为某些东西被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧或欺骗性的请求)任务路由)。
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
我不确定出了什么问题。 怎么了?
【问题讨论】:
【参考方案1】:在Spring-World中的请求payload应该对应@RequestBody,例如:
public SomethingElse updateValue(@RequestBody Something value)
// ...
其中“某物”是任何 POJO。
要使用@RequestParam,请参阅: https://github.com/jquery/jquery/issues/3269
($.ajax 在 DELETE 正文中发送data
属性而不是查询字符串)
【讨论】:
【参考方案2】:"bno": bno
在请求的正文中。所以你的Controller方法应该是@RequestBody int bno
。 @RequestParam
用于 servlet 请求参数。即:/uid/cno?bno=14
差异供参考:What is difference between @RequestBody and @RequestParam?
【讨论】:
啊哈!多亏了你,我才知道两者之间的区别。谢谢!以上是关于我在使用 ajax 将 json 数据发送到控制器时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core MVC - 将 HTML 表转换为 json 并使用 ajax 发送到控制器