在前后端分离开发的项目种,前端获取数据的方式基本都是通过Ajax
。请求方法也有所不同,常见的有POST,GET,PUT,DELETE
等。甚至连请求的数据类型都不一样,x-www-form-urlencodeed,form-data,json
等。
那么前后端交互时如何接收具体数据呢?
spring boot接收JSON数据
{
"id": 0,
"address_id": 6,
"detail_address": "我是11251111111",
"user_id": 611111,
"create_time": null,
"update_time": null,
"name": "测试人11111",
"phone": "13378954789111"
}
@RequestMapping(value = "/add",method = RequestMethod.POST,produces = "application/json;charset=UTF-8")
public ResponseData addUsers(@RequestBody UserInfo userInfo){
if (StringUtils.isNotEmpty(userInfo.getAccount())){
if (userInfoService.ifUserExist(userInfo.getAccount())){
return ResponseData.error(500,"账户已存在,请重新设置!");
}
}
System.out.println(userInfo.toString());
}
接收json数据的两个关键点:
- json 类型声明
produces = "application/json;charset=UTF-8"
@RequestMapping接口声明传输类型不是json。
- @RequestBody声明Java Bean
json数据必须使用对象接收,并且必须使用@RequestBody声明,并且json key必须对应bean的成员变量名。
spring boot 接收x-www-form-urlencodeed
表单数据
表单数据有两种接收类型:
- @RequestParamReceive
@RequestMapping(value = "/fuzzy",method = RequestMethod.POST)
public ResponseData fuzzyQuery(@RequestParam("carType") Integer carTpe, @RequestParam("carStatus") Integer carStatus, @RequestParam("name") String name, @RequestParam("carNo") String carNo){
//String name1 = "%"+name+"%";
List<CarInfo> carInfos = carInfoService.fuzzySelect(carTpe, carStatus, name, carNo);
return ResponseData.success(carInfos);
}
使用@RequestParam的传入参数名必须与接收的参数名一致。如表单传入
name = 'mike'
,则后端接受时:@RequestParam("name") String name
。
- 对象接收
@RequestMapping(value = "/pageList",method = RequestMethod.POST)
public ResponseData carPageList(CarInfoSelect carInfoSelect){
IPage<CarInfoResult1> page = carInfoService.carPageList(carInfoSelect);
//LayuiPageInfo pageInfo = LayuiPageFactory.createPageInfo(page);
return ResponseData.success(page);
}
从表单传入的参数有很多。这些参数被封装成一个java对象来接收。不需要注释。注意与josn数据的区别。
spring boot 接收URL数据
/tmp?name=mike
类型
这种接收方法不要写错。下面这张图是错误的:
这样输入是就会报错404
该类型的传参,url通过/tmp?name=mike
这样传,接收知道对应的url,不用写?和其后面的字段
:
@GetMapping("/tmp")
public String getName(String name){
System.out.println(name);
return name;
}
/tmp/{type}/{page}
的参数接收
@GetMapping("/item/{type}/{page}")
public String getParvalue(@PathVariable("type") String type, @PathVariable("page")Integer page){
return "类型:"+type+"页数"+page;
}
总结:
- 只有两种类型不需要使用注解:
- 收到表单对象
/tmp?name=mike
类型的参数接收
- 需要使用注解的有:JSON,表单的单个接收,
/tmp/{type}/{page}
的参数接收
. . .
相关推荐
ads via 小工具