在restful接口开发中常用到GET(读取),POST(新建),PUT(更新)以及DELETE(删除)四种HTTP方法,这里就对这四种方法在SpringBoot开发中的运用以及所用到的注解进行讲解
一.GET
首先我们先按照原先SpringMVC中GET方式获取数据方式的写法,在SpringBoot中也能用。下图中用下划线/{city_id}/{user_id},而不用驼峰传递参数的原因主要是restful风格推荐URL请求中不采用大小写混合的驼峰命名方式,尽量采用全小写单词,如果需要连接多个单词,则采用连接符“_”连接单词。
@RestController
public class GetController {
//定义返回变量
private Map<String,Object> params = new HashMap<>();
/**
* 功能描述:测试restful协议,从路径中获取字段
* @param cityId
* @param userId
* @return
*/
@RequestMapping(path = "/{city_id}/{user_id}", method = RequestMethod.GET)
public Object findUser(@PathVariable("city_id") String cityId,
@PathVariable("user_id") String userId ){
params.clear();
params.put("cityId", cityId);
params.put("userId", userId);
return params;
}
}
然后启动,并采用postman接口测试工具测试一下,若有不会使用的朋友,可自行百度,非常简单好用
客户端下载地址: https://www.getpostman.com/apps
成功获取到数据!
传统写法中,我们需要指定方法method,在SpringBoot中提供了一个新注解@GetMapping,进一步简化了开发:
/**
* 功能描述:测试GetMapping
* @param from
* @param size
* @return
*/
@GetMapping(value="/v1/page_user1")
public Object pageUser(int from, int size ){
params.clear();
params.put("from", from);
params.put("size", size);
return params;
}
我们可以点击@GetMapping进入查看源码,发现该注解里面已经帮我们加了@RequestMapping( method = {RequestMethod.GET} )。
下面我们开发一下接收单个参数的注解,这个与SpringMVC中是一致的,都是使用@RequestParam注解,可以使用defaultValue
设置默认值,也可以重命名(这里将接收到page重命名为from)
/**
* 功能描述:默认值,是否必须的参数
* @param from
* @param size
* @return
*/
@GetMapping(value="/v1/page_user2")
public Object pageUserV2(@RequestParam(defaultValue="0",name="page") int from, int size ){
params.clear();
params.put("from", from);
params.put("size", size);
return params;
}
下面进行接口测试:
下面我们进行对象的接收,这个与SpringMVC也是一致的,都是使用@RequestBody注解,注意(需要指定http头为 content-type为application/json,在body中传输json格式的数据,然后提交方式必须为POST)不然会接收不到数据,这里也可以使用@PostMapping注解代替@RequestMapping
/**
* 功能描述:bean对象传参
* 注意:1、注意需要指定http头为 content-type为application/json
* 2、使用body传输数据
* @param user
* @return
*/
@RequestMapping("/v1/save_user")
public Object saveUser(@RequestBody User user){
params.clear();
params.put("user", user);
return params;
}
下面进行postman测试,Headers中填写content-type为application/json,body格式选raw(原生的json格式),提交方式为POST:
如果我们不设置请求头的内容为 application/json,那么http请求默认的请求方式是 text/plain,我们看到请求是不成功的,由此可见@RequestBody是必须接收一个json格式的字符串,并且它的请求头必须是application/json
在项目中我们经常需要获取请求头里面的信息,比如前后端都需要的token,在SpringBoot中我们使用@RequestHeader注解来获取请求头中对应的信息:
/**
* 功能描述:测试获取http头信息
* @param accessToken
* @param id
* @return
*/
@GetMapping("/v1/get_header")
public Object getHeader(@RequestHeader("token") String accessToken, String id){
params.clear();
params.put("access_token", accessToken);
params.put("id", id);
return params;
}
postman测试:
二.POST
POST主要用于表单提交操作,用到的注解是@PostMapping
/**
* 功能描述:测试PostMapping
* @param accessToken
* @param id
* @return
*/
@PostMapping("/v1/login")
public Object login(String id, String pwd){
params.clear();
params.put("id", id);
params.put("pwd", pwd);
return params;
}
postman测试:请求头的Content-Type设置为application/x-www-form-urlencoded(表单提交)
三.PUT
PUT主要用于更新操作,用到的注解是@PutMapping
@PutMapping("/v1/put")
public Object put(String id){
params.clear();
params.put("id", id);
return params;
}
postman测试:
这里我们看到我在url以及Body中都传了id参数,那么后台会把这两个参数都接收到了,并且进行拼接操作, POST,GET请求也是一样,不过只有Content-Type为application/x-www-form-urlencoded并且不使用@RequestBody接收参数的时候才会这样,GET方式不会都接收因为GET方式无法设置body的值。。。。。
- 只要使用@RequestBody注解则只会接收Body中json格式的数据,不会接收url中的参数。
- 如果后台没有使用@RequestBody注解,直接使用String id这种方式接收参数,但是Content-Type为application/json,这时候也不会接收重复数据,只会接收url中的参数
四.DELETE
DELETE主要是删除操作,用到的注解是@DeleteMapping
@DeleteMapping("/v1/del")
public Object del(String id){
params.clear();
params.put("id", id);
return params;
}
postman测试: