第一个基于springboot的web请求程序
通过创建一个带有springboot的spring项目,项目会自动生成一个程序启动类,该类启动时会启动该整个项目,而我们需要写一个web请求类,要求在本地浏览器上发送请求后,浏览器显示Hello,springboot,且控制台打印该语句。
其中的@RestController注解表示这是一个请求处理类,能向浏览器发送请求,而@RequestMapping注解则时表示下面的是一个请求方法,注解后的值为请求路径,在通过浏览器访问本地也就是localhost8080/hello的时候,就会实现注解下的方法
package com.itazhang.demos.web.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController//表示这是一个请求处理类
public class HelloController {
@RequestMapping("/hello")//表示这是浏览器的请求路径
public String hello(){
System.out.println("Hello,springboot");
return "Hello,springboot";
}
}
HTTP协议
HTTP请求格式
HTTP响应格式
使用Postman发送请求
Postman是一款非常好用的请求测试软件,将需要测试的地址输入进postman,就能类似于浏览器一样能对该接口进行测试,而在springboot创建的项目中使用相同的参数名的方法(例如请求发送的是name,那么参数的名字也得是name)就能接收数据,如下:
如果接收请求的参数名字不一样则需要注解@RequestParam 来完成映射,将注解后的参数名映射给后面方法里的参数名,如下:
postman界面
这是一个get请求所以需要将需要请求的内容写在请求行
如果是post请求,就需要将请求内容写在请求体中,也就是Postman的body中,如下:
使用对象来接收数据
在之前接收Postman发送来的数据时,需要定义一个个与发送的请求参数名字相同的参数的方法,这样在请求数据较多的时候是非常不方便的,这个时候我们能在后端写一个实体类用来接收请求数据,实体类中的名字也与传输的请求一致,将请求过来的数据直接实例化成该类的对象,这样就非常的简便,如下:
定义一个带参数的实体类
将s输入请求传入该实体类的方法
使用集合和数组来接收请求数据
使用数组接收请求数据时,将一个对应类型的数组传入到接收方法中即可,但是注意数组名字得与请求数据的名字相同,例如我下面请求传递两个name也就是名字。
使用集合接收数据时,也是将一个对应类型的集合传入到方法中,也得集合名字与请求数据的名字相同,且在使用集合来储存请求数据时,传入的集合前面得添加@RequestParam注解,如下:
日期时间类型数据的接收和请求(@DateTimeFormat)
日期时间类型的也是将LocalTimeDate类型的对象传入接收方法中,名字与请求的名字相同,且在该类对象的前面需要添加@DateTimeFormat注解,注解后面添加请求的日期时间格式,具体格式例子如下:yyyy-MM-dd HH-mm-ss,请求数据和代码如下:
Json类型数据的请求与接收 (@RequestBody)
Json为JavaScript里面的一种语言格式,其主要被用来作为网络数据传输的载体,而从前端发送过来的请求数据基本上都是json格式的数据,后端接收请求数据的话主要是使用封装实体类的方式来进行接收数据,该实体类中的属性名字得与json里的名字相同,属性为其他类的值的话,其他类内部的属性值也必须与json代码中的名字相同。
封装实体类如下:
postman传递json如下:因为需要传递json的数据,所以需要post请求,且在post请求下的raw中书写json代码。
接收数据方法如下:需要在该实体类对象前加上@RequesBody注解,这样的话就标准着将json中的数据会封装到这个实体类的中
接收请求的路径(@ParthVariable)
在实际开发中可能请求的路径后面跟着子路径名,那么我想获取子路径名,就得使用下面方法
这是发送的请求数据
接收路径参数 ,以下的{id}表示这是一个可变的参数,而使用@pathVariable注解能将后面的参数绑定起来,从而获取到该参数 ,例如发送过来path路径后面的子路径为1,我通过获取绑定的这个id就能得到该1参数,如果子路径为10,那么可以通过绑定的这个id获取到10参数。如果要获取path路径后面的多个参数就添加多个大括号加参数,且在传入方法时使用@PathVariable注解绑定即可,如
@RequestMapping("/path/{id}/{id2}") public String pathParam(@PathVariable Integer id,@PathVariable Integer id2){ System.out.println(id+" "+id2); return "ok"; }
使用result类统一响应相关结果
使用result类对相关的响应结果进行封装,如果需要响应前端的请求的话,直接返回调用result封装类里面的相关方法,并把需要响应的值传入这些方法,这样前端收到的响应结果就是规范化的。
服务端代码如下:
客户端接收返回数据如下: