JavaWeb——005 -- 请求响应 & 分层解耦(Postman、三层架构、IOC、DI、注解)

目录

一、请求

1、Postman(接口测试工具)

1.1、介绍

②、安装

2、简单参数

1.1、原始方式

1.2、SpringBoot方法

③、小结

3、实体参数

3.1、简单实体对象

3.2、复杂实体对象

3.3、小结

4、数组集合参数

①、数组​编辑

②、集合

③、小结

5、日期参数

6、JSON参数

6.1、Postman在发送请求时,如何传递json格式的请求参数

6.2、在服务端的controller方法中,如何接收json格式的请求参数

7、路径参数

①、传递单个参数

②、传递多个参数​编辑

8、小结​编辑

二、响应

1、@ResponseBody

2、统一响应结果

①、定义一个统一响应结构类 Result

②、小结

3、案例

3.1、需求说明

​编辑

3.2、实现步骤 

3.3、代码实现

3.4、问题分析

三、分层解耦

1、三层架构

1.1、三层架构程序的执行流程

1.2、代码拆分

1.3、三层架构的好处

2、分层解耦

2.1、耦合问题

2.2、解耦思想

3、IOC & DI 入门

4、IOC详解

①、@Component的衍生注解

②、bean的声明

③、组件扫描

④、小结

5、DI详解

①、@Autowired(自动装配)

②、小结


前言(SpringBoot程序请求响应流程)

以上一章的程序为例,一个基于SpringBoot的方式开发一个web应用,浏览器发起请求 /hello 后 ,给浏览器返回字符串 “Hello World ~”。

的Tomcat)。而我们在开发web程序时呢,定义了一个控制器类Controller,请求会被部署在Tomcat中的Controller接收,然后Controller再给浏览器一个响应,响应一个字符在浏览器发起请求,请求了我们的后端web服务器(也就是内置串 “Hello World”。 而在请求响应的过程中是遵循HTTP协议的。

但是在Tomcat这类Web服务器中,是不识别我们自己定义的Controller的。而Tomcat是一个Servlet容器,支持Serlvet规范,因此在tomcat中是可以识别 Servlet程序的。

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

那将来浏览器发送请求,会携带请求数据,包括:请求行、请求头;请求到达tomcat之后,tomcat会负责解析这些请求数据,然后呢将解析后的请求数据会传递给Servlet程序中的HttpServletRequest对象,那也就意味着 HttpServletRequest 对象就可以获取到请求数据。 而Tomcat,还给Servlet程序传递了一个参数 HttpServletResponse,通过这个对象,我们就可以给浏览器设置响应数据 。

一、请求

1、Postman(接口测试工具)

1.1、介绍

Postman是一款支持http协议的接口调试与测试工具,它不仅可以调试简单的css、html、脚本等简单的网页基本信息,还可以发送几乎所有类型的HTTP请求

②、安装

运行安装包,创建一个工作空间

 在新创建的工作空间中添加一个请求

这个软件我没创建账号(可能需要梯子)

2、简单参数

1.1、原始方式

Tomcat接收到http请求时:把请求的相关信息封装到HttpServletRequest对象中

在Controller中,我们要想获取Request对象,可以直接在方法的形参中声明 HttpServletRequest 对象。然后就可以通过该对象来获取请求信息:

//根据指定的参数名获取请求参数的数据值

String  request.getParameter("参数名")

@RestController

public class RequestController {
    //原始方式

    @RequestMapping("/simpleParam")

    public String simpleParam(HttpServletRequest request){
        // http://localhost:8080/simpleParam?name=Tom&age=10

        // 请求参数: name=Tom&age=10   (有2个请求参数)

        // 第1个请求参数: name=Tom   参数名:name,参数值:Tom

        // 第2个请求参数: age=10     参数名:age , 参数值:10

        String name = request.getParameter("name");//name就是请求参数名

        String ageStr = request.getParameter("age");//age就是请求参数名

        int age = Integer.parseInt(ageStr);//需要手动进行类型转换

        System.out.println(name+"  :  "+age);

        return "OK";

    }

}

该方式仅做了解接口,在以后的开发中基本不会用到,原因是因为:

1. 写法比较繁琐 2. 需要手动的进行类型转换

1.2、SpringBoot方法

在Springboot方法中可以自动进行类型转换。在Springboot的环境中,对原始的API进行了封装,接收参数的形式更加简单。 对于简单参数来讲,只要保证请求参数名和Controller方法中的形参名保持一致,就可以获取到请求参数中的数据值。

GEt方法

//springboot方式
    @RequestMapping("/simpleParam")
    public String simpleParam(String name,Integer age){
        System.out.println(name+":"+age);
        return "OK";

    }

发送Post请求: 

结果

如果形参与请求参数对应不上,也可以通过注解@RequestParam来进行映射: 

//springboot方式
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name") String name, Integer age){
        System.out.println(name+":"+age);
        return "OK";

    }

 结果

但是如果没有设置@RequestParam注解,且方法形参名与请求参数名不一致,那么虽然会无法接收到请求数据,但是它不会报错 

注解@RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递就会报错:

③、小结

3、实体参数

在使用简单参数做为数据传递方式时,前端传递了多少个请求参数,后端controller方法中的形参就要书写多少个。如果请求参数比较多,通过上述的方式一个参数一个参数的接收,会比较繁琐。

3.1、简单实体对象

此时,我们可以考虑将请求参数封装到一个实体类对象中。 要想完成数据封装,需要遵守如下规则:请求参数名与实体类的属性名相同

代码示例:

//2.实体参数
    @RequestMapping("/simplePojo")
    public String simplePojo(User user){
        System.out.println(user);
        return "OK";
    }

 

3.2、复杂实体对象

User.java

package com.yaqi.pojo;

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

    private Address address;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }
}

Address.java

package com.yaqi.pojo;

public class Address
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值