SpringBootWeb请求

1. 请求

1.1 Postman

1.1.1 介绍

  • Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。
  • 作用:常用于进行接口测试
  • 特征
    • 简单
    • 实用
    • 美观
    • 大方

1.1.2 安装

官网:www.postman.com

这里以Postman-win64-8.3.1-Setup.exe为列。

双击 “1.postman/Postman-win64-8.3.1-Setup.exe” 即可自动安装。

界面介绍:

如果我们需要将测试的请求信息保存下来,就需要创建一个postman的账号,然后登录之后才可以。

1.2 简单参数

1.2.1 原始方式

通过Servlet中提供的API HttpServletRequest 可以获取请求的相关信息,比如获取请求参数:

@RequestMapping("/simpleParam")
public String simpleParam(HttpServletRequest request){
    String name = request.getParameter("name");
    String age = request.getParameter("age");
    System.out.println(name+"  :  "+age);
    return "OK";
}

在Controller中,我们要想获取Request对象,可以直接在方法的形参中声明 HttpServletRequest 对象。然后就可以通过该对象来获取请求信息:

获取请求参数:request.getParameter("参数名")

postman测试:

1.2.2 SpringBoot方式

在Springboot的环境中,对原始的API进行了封装,接收参数的形式更加简单。 如果是简单参数,参数名与形参变量名相同,定义同名的形参即可接收参数。

@RequestMapping("/simpleParam")
public String simpleParam(String name , Integer age ){
    System.out.println(name+"  :  "+age);
    return "OK";
}

postman测试( GET 请求):

postman测试( POST请求 ):

我们可以点击上面的菜单栏: View ----> Show  Postman Console

1.2.3 参数名不一致

如果方法形参名称与请求参数名称不一致,可以使用 @RequestParam 完成映射。

如果请求参数名为 username,controller方法形参使用name进行接收,是不能够直接封装的,需要在方法形参前面加上 @RequestParam 然后通过value属性执行请求参数名,从而完成映射,代码如下:

@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam("username") String name , Integer age){
    System.out.println(name+"  :  "+age);
    return "OK";
}

 

1.3 实体参数

如果请求参数比较多,通过上述的方式一个参数一个参数的接收,会比较繁琐。 此时,我们可以考虑将请求参数封装到一个 pojo 对象中。 此时,要想完成数据封装,需要遵守如下规则:请求参数名与POJO的属性名相同

1.3.1 简单实体对象

1). 定义POJO实体类

public class User {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

lombom使用

在pom清单加依赖

<!--  快速定义POJO「javabean」-->
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
</dependency>

使用:


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

@Data
    @NoArgsConstructor//无参构造
    @AllArgsConstructor//满参构造器
    @EqualsAndHashCode//hashCode和equals
    public class User {
        private String name;
        private Integer age;
        // 为什么不用int?使用Integer的原因是,如果前端没有穿数据默认是null。如果使用int默认为0.

        //构造器
        //getter/setter
        //toString

        //让lombok去完成
    }

2). controller 方法

@RequestMapping("/simplePojo")
public String simplePojo(User user){
    System.out.println(user);
    return "OK";
}

3). postman

1.3.2 复杂实体对象

复杂实体对象指的是,在实体类中有一个或多个属性,也是实体类型的。如下:

public class Address {
    private String province;
    private String city;

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "Address{" +
                "province='" + province + '\'' +
                ", city='" + city + '\'' +
                '}';
    }
}
public class User {
    private String name;
    private Integer age;
    private Address address;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }
}

复杂实体对象的封装,需要遵守如下规则:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数。

1). Controller 方法

@RequestMapping("/complexPojo")
public String complexPojo(User user){
    System.out.println(user);
    return "OK";
}

2). Postman

1.4 数组集合参数

1.4.1 数组
  • 数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型形参即可接收参数

1). Controller方法

@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby){
    System.out.println(Arrays.toString(hobby));
    return "OK";
}

2). Postman

在前端请求时,有两种传递形式:

方式一: xxxxxxxxxx? hobby=game&hobby=java

方式二:xxxxxxxxxxxxx?hobby=game,java

1.4.2 集合
  • 集合参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam 绑定参数关系

1). Controller方法

@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobby){
    System.out.println(hobby);
    return "OK";
}

2). Postman

在前端请求时,有两种传递形式:

方式一: xxxxxxxxxx? hobby=game&hobby=java

方式二:xxxxxxxxxxxxx?hobby=game,java

1.5 日期参数

上述演示的都是一些普通的参数,在一些特殊的需求中,可能会涉及到日期类型数据的封装。比如,如下需求:

那对于日期类型的参数在进行封装的时候,需要通过 @DateTimeFormat注解,以及其中的pattern属性来设置日期的格式。因为日期的格式多种多样,请求pattern属性中如何制定,前端传递参数时就怎么传递。

1). Controller方法

@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
    System.out.println(updateTime);
    return "OK";
}

2). Postman

1.6 JSON参数

其实呢,在前后端进行交互时,如果是比较复杂的参数,前后端通过会使用JSON格式的数据进行传输。 而传递json格式的参数,服务端,在Controller中,我们通常会使用实体类进行封装。 具体的封装规则如下:

JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数。需要使用 @RequestBody 标识。

1). 实体类

public class Address {
    private String province;
    private String city;
    
	//省略GET , SET 方法
}
public class User {
    private String name;
    private Integer age;
    private Address address;
    
    //省略GET , SET 方法
}

2). Controller方法

@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user){
    System.out.println(user);
    return "OK";
}

3). Postman

注意:在测试时,要使用post请求,并且到body中写JSON字符串

如下:

 

1.7 路径参数

处理上述演示的在请求体传递参数,以及在请求的url后面通过 ?xxx=xxx 的形式传递参数以外,在现在的开发中,经常还会直接在请求的URL中传递参数。比如:

http://localhost:8080/user/1 http://localhost:880/user/1/0

上述的这种传递请求参数的形式呢,我们称之为:路径参数。

  • 路径参数:通过请求URL直接传递参数,使用{…}来标识该路径参数,需要使用 @PathVariable 获取路径参数

1). Controller方法

@RequestMapping("/path/{id}")
public String pathParam(@PathVariable Integer id){
    System.out.println(id);
    return "OK";
}

@RequestMapping("/path/{id}/{name}")
public String pathParam2(@PathVariable Integer id, @PathVariable String name){
    System.out.println(id+ " : " +name);
    return "OK";
}

 

2). Postman

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值