@requestbody接收json,必须一一对应吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@requestbody接收json,必须一一对应吗相关的知识,希望对你有一定的参考价值。
jq ajax通过post json对象遇到的HTTP 415/400问题错误解决方案:
客户端:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript"
src="<%=basePath%>resources/scripts/jquery-2.0.3.min.js"></script>
<script type="text/javascript">
$(function()
$("#send").click(function()
var jsondata = $("#jsondata").val();
var jsonobj = JSON.parse(jsondata)
var callback = function (data)
$("#result").html(JSON.stringify(data))
$.postJSON(\'<%=basePath%>api/user/test\', jsonobj, callback)
);
)
$.postJSON = function(url, data, callback)
return jQuery.ajax(
\'type\' : \'POST\',
\'url\' : url,
\'contentType\' : \'application/json\',
\'data\' : JSON.stringify(data),
\'dataType\' : \'json\',
\'success\' : callback
);
;
</script>
</head>
<body>
JSON对象
<br>
<textarea id="jsondata" cols="60" rows="5">
"id":2,"gender":0,"mobile":"15072370640","password":"123456","accessToken":"fd6bf3dd3cca4b0ca7c9099447994dba"
</textarea><br>
<button id="send">POST</button><br>
<font color="red" id="result"></font>
</body>
</html>
spring mvc 服务端:
@RequestMapping(value="/test",method=RequestMethod.POST)
public @ResponseBody Map<String, Object> testPostJson(
@RequestBody UserForm userForm,
BindingResult bindingResult)
Map<String, Object> map = new HashMap<String, Object>();
if (bindingResult.hasErrors())
map.put("errorCode", "40001");
map.put("errorMsg", bindingResult.getFieldError().getDefaultMessage());
map.put("user", userForm);
return map;
测试:
结果
"user":"name":null,"id":2,"password":"123456","avatar":null,"gender":0,"mobile":"15072370640","accessToken":"fd6bf3dd3cca4b0ca7c9099447994dba" 参考技术A 是的。必须是一一对应的。
@RequestParam和@RequestBody的区别
-
如果参数前写了@RequestParam(xxx), 那么前端必须有对应的xxx名字才行(不管其是否有值), 如果没有
xxx的话, 就和报错, 400
如果参数前不写@RequestParam(xxx)的话,那么就前端可以有, 也可以没有对应的xxx
-
能接收地址栏的参数, 也可以
-
如果@requestParam注解的参数是int类型,并且required=false,此时如果不传参数的话,会报错。原因是,required=false时,不传参数的话,会给参数赋值null,这样就会把null赋值给了int,因此会报错。
#@RequestBody()
-
接收前端Content-Type为
application/json
的json串(不能是json对象), 由于get没有请求体, 所以没有Content-Type,发送的请求必须是post -
以上是关于@requestbody接收json,必须一一对应吗的主要内容,如果未能解决你的问题,请参考以下文章
SpringMVC 通过post接收form参数或者json参数
@RequestBody接收Json参数 用自定义注解对Vo对象中Date类型日期格式校验
SpringMVC @RequestBody接收Json对象字符串