3.请求与响应

请求与响应

一、请求

1.实现请求的必须注解

(1)@RestController

Controller类前添加该注解,该注解集成了@Controller@ResponseBody

(2)@RestMapping(“…”)

Controller类中的方法前添加该注解,双引号里填写请求资源位置,例如在创建好的SpringBoot项目中新建一个名为HelloController.class文件,添加以下代码:

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        return "hello world!";
    }
}

然后在SpringBoot的启动类*“项目名+Application”.class*文件中运行SpringBoot项目。若运行成功,则在浏览器输入“localhost:8080/hello”,浏览器显示hello world!则说明资源访问成功。

(3)请求方式

要设置请求的方式固定为GET、POST、PUT、DELETE,有以下两种方式。

方式一:调用@RestMapping(“…”)注解中的method属性
@RequestMapping(value = "/depts", method = RequestMethod.GET)   //指定请求方式为GET
public Result list(){
    log.info("查询全部部门数据");

    //调用Service查询部门数据
    List<Dept> deptList = deptService.list();

    return Result.success(deptList);
}
方式二:直接使用@GetMapping、@DeleteMapping、@PostMapping、@PutMapping代替@RestMapping注解

这四个注解实现了@RestMapping注解的内容,只是将method属性的值提前设置好了。

@GetMapping("/{id}")
public Result listById(@PathVariable Integer id){
    log.info("根据id查询部门:{}", id);
    Dept dept = deptService.listById(id);
    return Result.success(dept);
}

2.请求过程中可能常用的注解

(1)抽离相同的请求资源路径

假如在同一个Controller类中有多个请求,但是请求的资源路径都包含了相同的部分,如下图所示:

在这里插入图片描述

可以在该Controller类前面使用*@RequestMapping(“/depts”)*将相同资源地址前缀抽离出来,类中的子注解会直接将该地址设为起始地址

在这里插入图片描述

(2)获取请求路径中的变量参数

在编写请求接口时,若要获取请求路径中的变量参数的值,可以使用@PathVariable注解来实现,例如如下所示,要根据id删除信息,请求的url路径为/{id},通过在方法定义的形参前面添加@PathVariable注解就可以获取到请求路径中的id的值:

/**
* 删除部门
* @return
*/
@DeleteMapping("/{id}")
public Result delete(@PathVariable Integer id){
    log.info("根据id删除部门:{}",id);
    //调用Service删除部门
    deptService.delete(id);
    return Result.success();
}

注意:方法定义的形参名应当与请求资源路径{…}中的名字一样

(3)获取请求体中的JSON格式数据

在编写请求接口时,若要获取请求体中的JSON格式数据,可以使用@RequestBody注解来实现,例如如下所示,要根据新增数据信息,通过在方法定义的形参前面添加@RequestBody注解就可以获取到请求体中JSON格式数据。

此处形参类型为抽象类对象:

Dept:

  • Integer id
  • String name
  • LocalDateTime createTime
  • LocalDateTime updateTime

请求体中的JSON数据为:

JSON:

{

​ id : 1

​ name : 学工部

}

/**
 * 新增部门
 * @return
 */
@PostMapping
public Result add(@RequestBody Dept dept){
    log.info("新增部门:{}", dept);
    deptService.add(dept);
    return Result.success();
}

注意:此处请求体JSON所携带的数据名字要与dept中的属性名相同。

(4)为接口方法的形参设置默认值

例如在进行分页查询时,要为分页查询请求的方法中定义的形参设置默认值:page(页码)为1,pageSize(每页数据)为10,可以使用@RequestParam注解中的defaultValue属性来设置,如下所示:

/**
 * 分页查询
 * @param page
 * @param pageSize
 * @return
 */
@GetMapping("/emps")
public Result page(@RequestParam(defaultValue = "1") Integer page,
                   @RequestParam(defaultValue = "10")Integer pageSize){
    log.info("分页查询信息:{},{}",page,pageSize);
    PageBean pageBean = empService.page(page, pageSize);

    return Result.success(pageBean);
}
(5)获取请求路径中的值为日期格式

若要获取形如”2020-01-01“这种日期格式的值,可以使用@DateTimeFormat注解来实现转格式,例如如下代码:

/**
 * 分页查询
 * @param page
 * @param pageSize
 * @return
 */
@GetMapping("/emps")
public Result page(@RequestParam(defaultValue = "1") Integer page,
                   @RequestParam(defaultValue = "10")Integer pageSize,
                   String name, Short gender,
                   @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
                   @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end){
    log.info("分页查询信息:{},{},{},{},{},{}",page,pageSize,name,gender,begin,end);
    //调用service分页查询
    PageBean pageBean = empService.page(page, pageSize,name,gender,begin,end);

    return Result.success(pageBean);
}

二、响应

1.实现响应的必须注解

(1)@ResponseBody

位置:Controller类/方法上

作用:将方法的返回值直接响应,若返回值类型是实体对象/集合,转JSON格式响应

(2)统一响应结果

Result(code、msg、data)

2.RestFul接口规范

  • REST(REpresentational State Transfer),表述性状态转换,它是一种软件架构风格

传统风格:

  • GET:查询
  • POST:新增
  • POST:修改
  • GET:删除

REST风格:

  • GET:查询
  • POST:新增
  • PUT:修改
  • DELETE:删除
  • REST是风格,是约定方式,约定不是规定,可以打破。、
  • 描述模块的功能通常使用复数,也就是加s的格式来描述,表示此类资源,而非单个资源。如:users、emps、books…

三、@Slf4j注解

传统的方式想要在日志中输出我们想要的内容,需要在Controller控制层类中定义一个Logger对象才能实现。如下所示:

private static Logger log = LogFactory.getLog(DeptController.class);
log.info("查询全部部门数据");

@Slf4j注解中定义了该对象,在Controller控制层类前面引用@Slf4j注解后不需要定义Logger对象也能直接使用log.info()
层类中定义一个Logger对象才能实现。如下所示:

private static Logger log = LogFactory.getLog(DeptController.class);
log.info("查询全部部门数据");

@Slf4j注解中定义了该对象,在Controller控制层类前面引用@Slf4j注解后不需要定义Logger对象也能直接使用log.info()

  • 19
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值