在restful接口开发中常用到GET(读取),POST(新建),PUT(更新)以及DELETE(删除)四种HTTP方法,这里就对这四种方法在SpringBoot开发中的运用以及所用到的注解进行讲解

一.GET

首先我们先按照原先SpringMVC中GET方式获取数据方式的写法,在SpringBoot中也能用。下图中用下划线/{city_id}/{user_id},而不用驼峰传递参数的原因主要是restful风格推荐URL请求中不采用大小写混合的驼峰命名方式,尽量采用全小写单词,如果需要连接多个单词,则采用连接符“_”连接单词。

Java springboot对接sso接口 springboot编写对外http接口_ci

@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

Java springboot对接sso接口 springboot编写对外http接口_请求头_02

成功获取到数据!

传统写法中,我们需要指定方法method,在SpringBoot中提供了一个新注解@GetMapping,进一步简化了开发:

 

Java springboot对接sso接口 springboot编写对外http接口_ci_03

/**
	 * 功能描述:测试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} )。

Java springboot对接sso接口 springboot编写对外http接口_ci_04

下面我们开发一下接收单个参数的注解,这个与SpringMVC中是一致的,都是使用@RequestParam注解,可以使用defaultValue

设置默认值,也可以重命名(这里将接收到page重命名为from)

 

Java springboot对接sso接口 springboot编写对外http接口_ci_05

/**
     * 功能描述:默认值,是否必须的参数
     * @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;

    }

下面进行接口测试:

Java springboot对接sso接口 springboot编写对外http接口_json_06

下面我们进行对象的接收,这个与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:

Java springboot对接sso接口 springboot编写对外http接口_json_07

Java springboot对接sso接口 springboot编写对外http接口_ci_08

如果我们不设置请求头的内容为 application/json,那么http请求默认的请求方式是 text/plain,我们看到请求是不成功的,由此可见@RequestBody是必须接收一个json格式的字符串,并且它的请求头必须是application/json

Java springboot对接sso接口 springboot编写对外http接口_ci_09

在项目中我们经常需要获取请求头里面的信息,比如前后端都需要的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测试:

Java springboot对接sso接口 springboot编写对外http接口_ci_10

 二.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(表单提交)

 

Java springboot对接sso接口 springboot编写对外http接口_json_11

 三.PUT

PUT主要用于更新操作,用到的注解是@PutMapping

@PutMapping("/v1/put")
    public Object put(String id){
        params.clear();
        params.put("id", id);
        return params;
    }

postman测试:

 

Java springboot对接sso接口 springboot编写对外http接口_请求头_12

这里我们看到我在url以及Body中都传了id参数,那么后台会把这两个参数都接收到了,并且进行拼接操作, POST,GET请求也是一样,不过只有Content-Type为application/x-www-form-urlencoded并且不使用@RequestBody接收参数的时候才会这样,GET方式不会都接收因为GET方式无法设置body的值。。。。。

  1. 只要使用@RequestBody注解则只会接收Body中json格式的数据,不会接收url中的参数。
  2. 如果后台没有使用@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测试:

Java springboot对接sso接口 springboot编写对外http接口_ci_13