# get请求

get的含义

get意为检索,获取。

  1. @PathVariable:当请求路径格式为http://ip:port/projectName/aaaaa/{xx},在方法的@RequestMapping注解里面写上@RequestMapping("user/{id}"),表示的是 请求的最后一个字符就是id的值,在方法参数里我们用@PathVariable注解取值。
@RequestMapping("user/{id}")
public String selectById(@PathVariable(name = "id") String id){
    System.out.println("参数id="+id);
    return "selectById请求成功";
}
1
2
3
4
5
  1. @RequestParam:当请求路径格式为http://ip:port/projectName/aaaaa?id=10086,时,在方法参数里我们用@RequestParam注解取值。
@RequestMapping("selectById")
public String selectById2(@RequestParam(name = "id") String id){
    System.out.println("参数id="+id);
    return "selectById2请求成功";
}
1
2
3
4
5
  1. @PathVariable + @RequestParam组合使用
@RequestMapping("selectUser/{id}")
public String selectByIdAndName(@PathVariable(name = "id") String id,
                                @RequestParam(name = "name") String name){
    System.out.println("参数id="+id);
    System.out.println("参数name="+name);
    return "selectByIdAndName请求成功";
}
1
2
3
4
5
6
7
  1. 不加任何注解的时候,如果用?传值,直接在方法参数里使用相同变量名接收就行。
@RequestMapping("selectUser2")
public String selectByIdAndName2(String id, String name){
    System.out.println("参数id="+id);
    System.out.println("参数name="+name);
    return "selectByIdAndName2请求成功";
}
1
2
3
4
5
6

# post请求

post的含义

post意为更新。

先定义一个实体对象类SysUser

@Data
public class SysUser {
    private String id;
    private String username;
    private String password;
    private Date birthday;
    private String email;
}
1
2
3
4
5
6
7
8
  1. post请求,参数格式是json,使用@RequestBody注解然后直接用对象接收参数,这种前台一般是ajax请求。
@PostMapping(path = "/addUser")
public String addUser(@RequestBody SysUser sysUser) {
    System.out.println(sysUser.toString());
    return "addUser请求成功";
}
1
2
3
4
5
  1. post请求,参数格式是表单数据,在postman里面就是form-data格式。
@PostMapping(path = "/addUser2")
public String addUser2(SysUser sysUser) {
    System.out.println(sysUser.toString());
    return "addUser2请求成功";
}
1
2
3
4
5

注意

  • json格式传递日期类型的时候使用YYYY-MM-DD,例如2019-09-09
  • 表单(form-data格式)传递日期类型的时候使用YYYY/MM/DD,例如2019/08/08
  • 这个是我们没有使用formate的情况,使用formate的话就根据自定义类型传递就可以了。
  • spring boot如果不加任何注解默认使用form-data类型
  1. 万能的map
@PostMapping("/addUser4")
public String addUser4(@RequestParam Map<String, Object> map) {
    System.out.println(">>>id="+map.get("id"));
    System.out.println(">>>name="+map.get("name"));
    return "addUser4请求成功";
}
1
2
3
4
5
6

x-www-form-urlencoded与params的区别

  • Params处设置的变量请求时会变成http://********?*******问号后面的参数带到请求的接口链接里。
  • x-www-form-urlencoded的参数则会放入到请求体的body中不会显式地出现在请求URL中。
  • post也可以使用params的方式传参,但是为了体现他与get的区别我们默认使用x-www-form-urlencoded格式就行。

# header以及Cookie

  1. 使用@RequestHeader@CookieValue获取请求头和cookie的信息
@GetMapping("getCookieAndHeader")
public String getCookieAndHeader(@RequestHeader(name = "myHeader") String myHeader,
                  @CookieValue(name = "myCookie") String myCookie) {
    System.out.println("myHeader=" + myHeader);
    System.out.println("myCookie=" + myCookie);
    return "getCookieAndHeader请求成功";
}
1
2
3
4
5
6
7
  1. 通过request获取headercookie
@GetMapping("/getCookieAndHeader2")
public String getCookieAndHeader2(HttpServletRequest request) {
    System.out.println("myHeader=" + request.getHeader("myHeader"));
    for (Cookie cookie : request.getCookies()) {
        if ("myCookie".equals(cookie.getName())) {
            System.out.println("myCookie=" + cookie.getValue());
        }
    }
    return "getCookieAndHeader2请求成功";
}
1
2
3
4
5
6
7
8
9
10
  1. 通过request获取普通参数,postget方法都可以获取到
@RequestMapping("/addUser3")
public String addUser3(HttpServletRequest request) {
    String username=request.getParameter("username");
    String password=request.getParameter("password");
    System.out.println("username = "+username);
    System.out.println("password = "+password);
    return "addUser3请求成功";
}
1
2
3
4
5
6
7
8

# x-www-form-urlencoded与form-data的区别

# x-www-form-urlencoded

  • 最常见的POST提交数据的方式了。浏览器的原生<form>表单,如果不设置enctype属性,那么最终就会以application/x-www-form-urlencoded方式提交数据。
  • 只能上传键值对,而且键值对都是通过&间隔分开的。

# form-data

  • 将每个kay-value分割为一个message,每个message可以传输二进制数据。
  • 每个message被边界分隔符分割,使用base64编码解决分隔符不能包含在原始的二进制文件中的问题。

form-data和x-www-form-urlencoded我们使用那个?

  • 对于较短的字母数字值(如大多数 Web 表单),添加所有MIME标头的开销将大大超过更有效的二进制编码所节省的成本。
  • 只有键值对来传输的时候我们选择x-www-form-urlencoded
  • 当有二进制文件需要传输的时候我们选择form-data
  • 当只有一个二进制文件需要传输我们选择binary

本章节参考链接:application/x-www-form-urlencoded or multipart/form-data? (opens new window)

Last Updated: 4/9/2024