javaweb--SpringBoot请求响应

本文详细介绍了在Springboot中处理简单参数、实体参数、集合参数、日期参数和JSON参数的方法,包括路径参数的接收,以及如何使用分层架构(Controller、Service、Mapper)进行控制反转和依赖注入,以实现高内聚、低耦合的开发原则。
摘要由CSDN通过智能技术生成

请求流程

请求

简单参数

简单参数:在向服务器发起请求时,向服务器传递的是一些普通的请求数据。

就是在URL后面加上一个?然后加上其他数据

后端接收

在Springboot的环境中,对原始的API进行了封装,接收参数的形式更加简单。  

 // http://localhost:8080/simpleParam?name=Tom&age=10
 // 第1个请求参数: name=Tom   参数名:name,参数值:Tom
 // 第2个请求参数: age=10     参数名:age , 参数值:10
    
 //springboot方式
 @RequestMapping("/simpleParam")
 public String simpleParam(String name , Integer age ){//形参名和请求参数名保持一致
        
    }

结论:不论是GET请求还是POST请求,对于简单参数来讲,只要保证==请求参数名和Controller方法中的形参名保持一致==,就可以获取到请求参数中的数据值。

实体参数

要想完成数据封装,需要遵守如下规则:请求参数名与实体类的属性名相同

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

集合参数

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

如果要封装到集合,要使用@RequestParam绑定参数关系

日期参数

对于日期类型的参数在进行封装的时候,需要通过@DateTimeFormat注解,以及其pattern属性来设置日期的格式。

 public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") 
                         LocalDateTime updateTime){

}

JSON参数

JSON是开发中最常用的前后端数据交互方式

如何传递json格式的请求参数

json格式数据需要存放在请求体里面(在url路径上不体现)

如何接收json格式的请求参数

  • 传递json格式的参数,在Controller中会使用实体类进行封装。

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

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

路径参数

直接在请求的URL中传递参数。

例如:http://localhost:8080/user/1

如何接收路径参数

使用{…}来标识该路径参数,需要使用@PathVariable获取路径参数

    //路径参数
    @RequestMapping("/path/{id}")
    //因为前端传递的路径参数值是可变的,所以后端接收到路径参数时,使用”[key)"方式来标记路径参数
    //@PathVariable注解:
    //1、获取到路径参数[id]
    //2、把路径参数绑定到形参变量id
    public String pathParam(@PathVariable Integer id){
       
    }

响应

统一响应结果

统一的返回结果使用类来描述,在这个结果中包含:

  • 响应状态码:当前请求是成功,还是失败

  • 状态码信息:给页面的提示信息

  • 返回的数据:给前端响应的数据(字符串、对象、集合)

public class Result {
    private Integer code;//响应码,1 代表成功; 0 代表失败
    private String msg;  //响应码 描述字符串
    private Object data; //返回的数据



    //增删改 成功响应(不需要给前端返回数据)
    public static Result success(){
        return new Result(1,"success",null);
    }
    //查询 成功响应(把查询结果做为返回数据响应给前端)
    public static Result success(Object data){
        return new Result(1,"success",data);
    }
    //失败响应
    public static Result error(String msg){
        return new Result(0,msg,null);
    }
}

分层解耦

三层架构

在我们进行程序设计以及程序开发时,尽可能让每一个接口、类、方法的职责更单一些(单一职责原则)。

单一职责原则:一个类或一个方法,就只做一件事情,只管一块功能。

这样就可以让类、接口、方法的复杂度更低,可读性更强,扩展性更好,也更利用后期的维护。

从组成上看可以分为三个部分:

  • 数据访问:负责业务数据的维护操作,包括增、删、改、查等操作。

  • 逻辑处理:负责业务逻辑处理的代码。

  • 请求处理、响应数据:负责,接收页面的请求,给页面响应数据。

 在我们项目开发中呢,可以将代码分为三层:

  • Controller:控制层。接收前端发送的请求,对请求进行处理,并响应数据。

  • Service:业务逻辑层。处理具体的业务逻辑。

  • (后面用的mapper)Dao:数据访问层(Data Access Object),也称为持久层。负责数据访问操作,包括数据的增、删、改、查。

 

  • 前端发起的请求,由Controller层接收(Controller响应数据给前端)

  • Controller层调用Service层来进行逻辑处理(Service层处理完后,把处理结果返回给Controller层)

  • Serivce层调用Dao(后面用的mapper)层(逻辑处理过程中需要用到的一些数据要从Dao(后面用的mapper)层获取)

  • Dao层(后面用的mapper)操作文件中的数据(Dao(后面用的mapper)拿到的数据会返回给Service层)

分层解耦

  • 内聚:软件中各个功能模块内部的功能联系。

  • 耦合:衡量软件中各个层/模块之间的依赖、关联的程度。

高内聚、低耦合的目的是使程序模块的可重用性、移植性大大增强。  

怎么解耦
  • 首先不能在EmpController中使用new对象。

解决思路

Spring中的两个核心概念:

  • 控制反转: Inversion Of Control,简称IOC。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。

    对象的创建权由程序员主动创建转移到容器(由容器创建、管理对象)。这个容器称为:IOC容器或Spring容器

  • 依赖注入: Dependency Injection,简称DI。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。

    程序运行时需要某个资源,此时容器就为其提供这个资源。

    例:EmpController程序运行时需要EmpService对象,Spring容器就为其提供并注入EmpService对象

IOC容器中创建、管理的对象,称之为:bean对象

IOC&DI

  • 使用Spring提供的注解:@Component ,就可以实现类交给IOC容器管理

    • controller用@controller;sevice用@service;mapper用@mapper

  • 使用Spring提供的注解:@Autowired ,就可以实现程序运行时IOC容器自动注入需要的依赖对象

Spring框架为了更好的标识web应用程序开发当中,bean对象到底归属于哪一层,又提供了@Component的衍生注解:

  • @Controller (标注在控制层类上)@RestController = @Controller + @ResponseBody

  • @Service (标注在业务层类上)

  • @Repository (标注在数据访问层类上)

要把某个对象交给IOC容器管理,需要在对应的类上加上如下注解之一:

注解说明位置
@Controller@Component的衍生注解标注在控制器类上
@Service@Component的衍生注解标注在业务类上
@Repository@Component的衍生注解标注在数据访问类上(由于与mybatis整合,用的少)
@Component声明bean的基础注解不属于以上三类时,用此注解
IOC容器中,存在多个相同类型的bean对象

Spring提供了以下几种解决方案:

  • @Primary确定默认的实现。

  • @Qualifier指定注入的bean的名称。

  • @Resource。通过name属性指定要注入的bean的名称。

 

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值