目标
- @RequestMapping的使用;
- @GetMapping的使用。
简要说明
本节的目标如上述所示,在本文中我们学会两个注解的使用就已经达到了本文的目的。文章后面还介绍了GET请求设置默认值、获取HTTP请求头信息等的操作,在此只是简单的列举了以下示例代码,如果读者想详细了解这部分,还需移步至官网了解。
内容
1、测试restful协议,从路径中获取字段,@RequestMapping的使用
首先我们来介绍第一种写法,就是从请求的路径中获取参数字段值,并将它赋值给一个变量,然后返回给前端,如下代码所示:
package net.xqwexample.mavendemo02.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
//测试http协议的get请求 @ReatController表明以一个json格式的返回给前端
@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("city_id", cityId);
params.put("user_id", userId);
return params;
}
}
上述代码的请求地址及运行结果如下所示:
2、测试@GetMapping的使用
上述我们通过@RequestMapping这个注解来简单地介绍了一下在Get请求中它的使用方法,从上面可知,此注解使用的话需要在它的method属性中还要指定一下请求方式,如果我们不想指定的话,还有另一种写法,就是接下来要介绍的@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;
}
使用此注解的话请求地址的写法跟之前可就不一样了,它需要我们原封不定的在地址里写上“/v1/page_user1”,然后跟“?from=99&size=12”格式即可,如下:
3、请求参数设置默认值
在我们开发的时候,有些请求参数是要设置默认值的,接下来我们通过代码介绍一下设置默认值的注解@RequestParam的用法:
/*
* 默认值
* @param from
* @param size
* @return
* */
@GetMapping(value="/v1/page_user2")
public Object pageUser2(@RequestParam(defaultValue="0",name="page") int from,int size) {
params.clear();
params.put("from", from);
params.put("size", size);
return params;
}
上述代码中还是使用了@GetMapping注解来写请求地址,但是与第二部分不同的是,这次的写法中我们通过@GetMapping来设置了请求参数的默认值。
上述代码中page变量最终会映射到from变量上面去,所以在请求地址中书写时应该是“localhost:8080/v1/page_user2?page=22&size=88”,而不会再使用from去请求,如图:
如果我们用from去设置请求参数或者不指定page的参数,仅仅指定size的参数的话,返回的from会有一个默认值0,如图:
4、bean对象传参
如果我们要传的参数很多的情况下上述几种方法是不能满足要求的,所以我们得介绍下面这种方法,首先定义一个User对象,相当于一个POJO(还不理解是什么作用),下面直接上代码吧:
User对象的代码:
package net.xqwexample.mavendemo02.domain;
//相当于定义一个POJO
public class User {
private int age;
private String name;
private String photo;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
public String getPhoto() {
return photo;
}
public void setPhoto(String photo) {
this.photo=photo;
}
//其它的方法
}
bean对象传参的代码:
/*
* 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中去测试这个接口,发现它可以传参并且赋值,如下图:
5、获取http头信息
代码:
/*
* 获取http头信息
* @param accessToken
* @param id
* @return
* */
@GetMapping("/v1/get_header")
public Object getHeader(@RequestHeader("access_token") String accessToken,String id) {
params.clear();
params.put("access_token",accessToken);
params.put("id", id);
return params;
}
结果:
6、HttpServletRequest request自动注入获取参数
代码如下:
@GetMapping("/v1/test_request")
public Object testRequest(HttpServletRequest request) {
params.clear();
String id=request.getParameter("id");
params.put("id", id);
return params;
}
作用类似于第二种方法。
总结
本文主要介绍了HTTP接口GET请求的基本信息和用法,在此文章中记录的很简单,没有做过深的研究,如果读者对相应知识感兴趣,可以移步至官网详细学习。