获取url模板上数据的(/{id})@DefaultValue | 获取请求参数的(包括post表单提交)键值对(?param1=10¶m2=20)、可以设置defaultValue | |
JAX-RS | @PathParam | @QueryParam |
Spring | @PathVariable | @RequestParam |
有一次的请求是 :
http://localhost:8080/system/getMenuListPage?level=0&parent_id=0&_=1532879287887
后台返回400 BadRequest 。
接收用的
@RequestMapping(value = "getMenuListPage", method= RequestMethod.GET,produces = "text/html;charset=UTF-8") @ResponseBody public String getMenuListPage(Menu menu, @RequestParam(value="pageNumber") Integer pageNumber, @RequestParam(value="pageSize") Integer pageSize){
将@RequestParam 用 @QueryParam 替换后就返回 200.
<-------------------------------- ------------------------>
之后补: 发现@RequestParam 默认是required = true 。当此项参数不传时就被拒绝,返回400。可以改成如下:
@RequestMapping(value = "getMenuListPage", method= RequestMethod.GET,produces = "text/html;charset=UTF-8") @ResponseBody public String getMenuListPage(Menu menu, @RequestParam(value="pageNumber", required = false) Integer pageNumber, @RequestParam(value="pageSize", required = false) Integer pageSize){
<-------------------------------- ------------------------>
@RequestParam
和 @PathVariable
注解是用于从request中接收请求的,两个都可以接收参数,关键点不同的是@RequestParam
是从request里面拿取值,而 @PathVariable
是从一个URI模板里面来填充。
总结:http请求报400错误的原因分析
在ajax请求后台数据时有时会报 HTTP 400 错误 - 请求无效 (Bad request);出现这个请求无效报错说明请求没有进入到后台服务里;
原因:1)前端提交数据的字段名称或者是字段类型和后台的实体类不一致 或 前端提交的参数跟后台需要的参数个数不一致,导致无法封装;
2)前端提交的到后台的数据应该是json字符串类型,而前端没有将对象转化为字符串类型;
解决方案:
1)对照字段名称,类型保证一致性
2)使用stringify将前端传递的对象转化为字符串 data: JSON.stringify(param) ;