# day01-SpringBootWeb请求响应-注解总结

发布时间 2023-12-20 17:19:13作者: 白子伍

前言

在SpringBoot进行web程序开发时,它内置了一个核心的Servlet程序 DispatcherServlet,称之为 核心控制器。 DispatcherServlet 负责接收页面发送的请求,然后根据执行的规则,将请求再转发给后面的请求处理器Controller,请求处理器处理完请求之后,最终再由DispatcherServlet给浏览器响应数据

浏览器发送请求,到达tomcat之后,tomcat会解析数据,会传递给Servlet程序的HttpServletRequest对象,意味着 HttpServletRequest 对象就可以获取到请求数据,而Tomcat,还给Servlet程序传递了一个参数 HttpServletResponse,通过这个对象,我们就可以给浏览器设置响应数据 。

1. 请求与响应

接收前端发过来的请求数据

  • @RequestParam

    默认情况下,请求中参数名相同的多个值,是封装到数组。如果要封装到集合,要使@RequestParam绑定参数关系。eg.(@RequestParam List hobby)

  • @DateTimeFormat

    对于日期类型的参数进行封装,eg. @DateTimeFormat(pattern="yyyy-MM-dd-HH:mm:ss")

  • @RequestBody

    将JSON数据映射到形参的实体类对象中(JSON中的key和实体类中的属性名保持一致)

  • @PathVariable

    前端可能通过url往后端传递参数,eg. /

统一响应结果

  • @RestController

    将方法返回值直接响应给浏览器。如果返回值类型是实体对象/集合,将会转换为JSON格式后在响应给浏览器.
    @RestController = @Controller + @ResponseBody

    @RestController
    public class ResponseController { 
        //响应统一格式的结果
        @RequestMapping("/hello")
        public Result hello(){
            System.out.println("Hello World ~");
            //return new Result(1,"success","Hello World ~");
            return Result.success("Hello World ~");
        }
    
        //响应统一格式的结果
        @RequestMapping("/getAddr")
        public Result getAddr(){
            Address addr = new Address();
            addr.setProvince("广东");
            addr.setCity("深圳");
            return Result.success(addr);
        }
    
        //响应统一格式的结果
        @RequestMapping("/listAddr")
        public Result listAddr(){
            List<Address> list = new ArrayList<>();
    
            Address addr = new Address();
            addr.setProvince("广东");
            addr.setCity("深圳");
    
            Address addr2 = new Address();
            addr2.setProvince("陕西");
            addr2.setCity("西安");
    
            list.add(addr);
            list.add(addr2);
            return Result.success(list);
        }
    }
    

其他注解

  • @Autowired

就可以实现程序运行时IOC容器自动注入需要的依赖对象。

@Autowired //运行时,从IOC容器中获取该类型对象,赋值给该变量
private EmpService empService ;

bean对象具体属于哪一层?

@Controller (标注在控制层类上)
@Service (标注在业务层类上)
@Repository (标注在数据访问层类上,由于与mybatis整合,
用的少)
@Component 不知道属于哪层就用这个

2. 控制反转和依赖注入

软件设计原则:高内聚低耦合。

高内聚指的是:一个模块中各个元素之间的联系的紧密程度,如果各个元素(语句、程序段)之间的
联系程度越高,则内聚性越高,即 "高内聚"。
低耦合指的是:软件中各个层、模块之间的依赖关联程序越低越好。

controller,service,dao三层,怎么进行解耦操作(即省去new 对象的这个操作)?

  • 控制反转: Inversion Of Control,简称IOC。对象的创建控制权由程序自身转移到外部(容器),
    这种思想称为控制反转,该容器被称为IOC容器
  • 依赖注入: Dependency Injection,简称DI。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。
    IOC容器中创建、管理的对象,称之为:bean对象