JavaWeb学习日记5-请求响应,分层解耦

本文详细介绍了在SpringBoot应用中,如何通过DispatchServlet处理HTTP请求和响应,包括原始参数获取、实体对象、复杂数据结构、日期和JSON参数、路径参数的使用,以及如何利用@RequestBody、@ResponseBody和依赖注入(DI)进行分层设计。还讨论了如何通过@Component、@Autowired和@Qualifier解决bean管理问题。
摘要由CSDN通过智能技术生成

请求响应

概述

  • DispatchServlet核心控制器/前端控制器
  • HttpServletRequest请求对象
    • 获取请求数据
  • HttpServletResponse响应对象
    • 设置响应数据

请求

Postman

  • 一款插件,用于网页调试与发送网页HTTP请求,常用于进行接口测试

简单参数

  • 原始方式
    • 通过HttpServletRequest请求对象获取
  • 基于SpringBoot

实体参数

  • 简单实体对象:请求参数名与形参对象属性名相同,定义POJO接受即可
  • 复杂实体对象

数组集合参数

  • 数组参数
    • 请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接受参数
  • 集合参数
    • 请求参数名与形参集合名称相同且请求参数为多个,@RequestParam绑定参数关系

日期参数

  • @DataTimeFormat注解完成日期参数格式转换

Json参数

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

路径参数

  • 参数已经成为了URL的一部分,需要使用@PathVariable获取路径参数
  • 参数应该是动态的:@RequestMapping("/path/{id}")

响应

@ResponseBody

  • 类型:方法注解,类注解
  • 位置:Controller方法上/类上
  • 作用:将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为JSON格式响应
  • 说明:@RestController=@Controller+@ResponseBody
  • 统一响应结果Result
    • public class Result{
          //响应码,1成功,0失败
          private integer code;
          //提示信息
          private String msg;
          //返回的数据
          private Object data;
          //……
      }
    • {
          "code":"1",
          "msg":"操作成功",
          "data":...
      }
    • @RequsetMapping("/...")
      public Result ...(){
          ...
          return Result.success(...);
      }

      简化版

分层解耦

三层架构

  • 数据访问,逻辑处理,接受请求、响应数据
  • Controller:控制层,接受前端发送的请求,对请求进行处理并响应数据
  • service:业务逻辑层,处理具体的业务逻辑
    • 需要创建接口
  • dao:数据访问层(Data Access Object)(持久层),负责数据的访问操作
    • 需要创建接口

分层解耦

  • 将new对象换成从容器中拿到对象
  • 控制反转Inversion Of Control,IOC
    • 对象的创建控制权由程序自身转移到外部(容器)
  • 依赖注入Dependency Injection,DI
    • 容器为应用程序提供运行时所依赖的资源
  • Bean对象
    • IOC容器中创建、管理的对象,称之为bean

IOC&DI入门

  • 1.将Service及Dao层的实现类交给IOC容器管理
    • 加上@Component即可
  • 2.为Controller及Service注入运行时依赖的对象
    • 在变量前加入@Autowired
  • 3.运行测试

IOC详解

  • bean名字默认是类名首字母小写,也可以通过value指定名字
  • 在SpringBoot集成web开发时,声明控制器bean只能使用@Controller

Bean组件扫描

  • 解决方法
    • 1.手动指定@ComponentScan(不推荐)
    • 2.将代码放在启动类所在包及其子包下

DI详解

  • @Autowired注解默认是按照类型进行,如果存在多个相同类型的bean则会报错
  • 解决方法
    • 1.@Primary,指定优先级
    • 2.@Autowired+@Qualifier("bean的名字")
    • 3.@Resource(name="bean的名字"):替换@Autowired
  • @Autowired是spring提供,@Resource是jdk提供
  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值