[JavaWeb]【六】web后端开发-请求响应

前言:请求响应

目录

一  引子

二 请求

2.1 Postman

2.1.1 安装

2.1.2 创建工作空间

 2.1.3 添加接口

2.2 简单参数

2.2.1 原始方式(不推荐)

 2.2.2 SpringBoot方式-GET(参数名与形参变量名相同)

 2.2.3 SpringBoot方式-POST(参数名与形参变量名相同)

2.2.4 SpringBoot方式-POST(参数名与形参变量名不相同)

2.2.5 @RequestParam注解决SpringBoot方式-POST(参数名与形参变量名不相同)

2.3 实体参数

2.3.1 简单的实体类参数

2.3.1.1 创建实体类User

 2.3.1.2 创建接口

2.3.2 复杂实体参数

 2.3.2.1 创建实体类Address

 2.3.2.2 修改实体类User

 2.3.2.3 创建接口

2.4 数组集合参数

2.4.1 数组参数

 2.4.2 集合参数

2.5 日期参数

2.6 Json参数

2.7 路径参数

 2.7.1 单个路径参数

 2.7.2 多个路径参数

 2.8 总结

三 响应

 3.1 @Responbody响应示例(发现不便管理、难以维护)​编辑

 3.1.1 创建类ResponseController 

3.1.2 执行结果

3.1.2.1 返回字符串

​编辑3.1.2.2 返回对象json

​编辑 3.1.2.3 返回集合json

​编辑3.2 统一响应结果

 3.2.1 统一结果处理类Result

 3.2.2 优化类ResponseController

3.2.3 执行结果(返回统一)

 3.3 总结

 3.4 统一响应结果的案例

 3.4.1 分析步骤

3.4.2 引入dom4j 

3.4.3 引入工具类XmlParserUtils 

3.4.4 引入实体类 Emp

 3.4.5 引入emp.xml文件

 3.4.6 引入前端页面

 3.4.7 新增EmpController类

3.4.8 访问

 3.4.9 思考

四 分层解耦

4.1 三层架构

4.1.1 概述

 4.1.2 Dao层

4.1.2.1  新增EmpDao接口

4.1.2.2 新增EmpDaoA实现类

4.1.3 Service层

4.1.3.1 新增EmpService接口

4.1.3.2 新增EmpServiceA实现类

4.1.3 Controller层

4.1.3.1 优化EmpController

4.1.4 对比

4.2 分层解耦

 4.2.1 解耦

4.3 IOC(控制反转) & DI(依赖注入)入门

 4.3.1 优化EmpDaoA实现类

’4.3.2 优化EmpServiceA实现类

 4.3.3 优化EmpController类

4.3.4 如何更改为:实现类EmpserviceB

 4.3.5 总结

4.4 IOC详解

 4.4.1 优化EmpDaoA实现类

’4.4.2 优化EmpServiceA实现类

 4.4.3 优化EmpController类

4.4.4 bean组件扫描

 4.4.5 总结

 4.5 DI详解

4.5.1 @Primary

 4.5.2 @Qualifier

 4.5.3 @Resource

 4.5.3 总结


一  引子

[JavaWeb]【六】web后端开发-请求响应_第1张图片

[JavaWeb]【六】web后端开发-请求响应_第2张图片

二 请求

2.1 Postman

[JavaWeb]【六】web后端开发-请求响应_第3张图片

[JavaWeb]【六】web后端开发-请求响应_第4张图片

2.1.1 安装

2.1.2 创建工作空间

[JavaWeb]【六】web后端开发-请求响应_第5张图片

 [JavaWeb]【六】web后端开发-请求响应_第6张图片

 2.1.3 添加接口

[JavaWeb]【六】web后端开发-请求响应_第7张图片

 [JavaWeb]【六】web后端开发-请求响应_第8张图片

 [JavaWeb]【六】web后端开发-请求响应_第9张图片

2.2 简单参数

2.2.1 原始方式(不推荐)

[JavaWeb]【六】web后端开发-请求响应_第10张图片

[JavaWeb]【六】web后端开发-请求响应_第11张图片

 [JavaWeb]【六】web后端开发-请求响应_第12张图片

 2.2.2 SpringBoot方式-GET(参数名与形参变量名相同)

[JavaWeb]【六】web后端开发-请求响应_第13张图片

[JavaWeb]【六】web后端开发-请求响应_第14张图片

[JavaWeb]【六】web后端开发-请求响应_第15张图片

 2.2.3 SpringBoot方式-POST(参数名与形参变量名相同)

[JavaWeb]【六】web后端开发-请求响应_第16张图片

 

2.2.4 SpringBoot方式-POST(参数名与形参变量名不相同)

[JavaWeb]【六】web后端开发-请求响应_第17张图片

 参数不同 获取null

 

[JavaWeb]【六】web后端开发-请求响应_第18张图片

2.2.5 @RequestParam注解决SpringBoot方式-POST(参数名与形参变量名不相同)

[JavaWeb]【六】web后端开发-请求响应_第19张图片

 此问题是解决2.2.4的问题[JavaWeb]【六】web后端开发-请求响应_第20张图片

package com.runa.controller;


import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RequestController {
//    //原始方式
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request){
        //获取请求参数
//        String name = request.getParameter("name");
//        String ageStr = request.getParameter("age");
//        int age = Integer.parseInt(ageStr);
//
//        System.out.println(name + ":" + age);
//        return "ok";
//    }

    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名相同)
//    @RequestMapping("/simpleParam")
//    public String simpleParam(String name, Integer age){
//        //获取请求参数
//        System.out.println(name + ":" + age);
//        return "ok";
//    }

    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名不相同)
//    @RequestMapping("/simpleParam")
//    public String simpleParam(String username, Integer age){
//        //获取请求参数
//        System.out.println(username + ":" + age);
//        return "ok";
//    }
    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名不相同)
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name")String username, Integer age){  //@RequestParam(name="name", required = false)
        //获取请求参数
        System.out.println(username + ":" + age);
        return "ok";
    }
}

 [JavaWeb]【六】web后端开发-请求响应_第21张图片

2.3 实体参数

[JavaWeb]【六】web后端开发-请求响应_第22张图片

2.3.1 简单的实体类参数

[JavaWeb]【六】web后端开发-请求响应_第23张图片

2.3.1.1 创建实体类User

[JavaWeb]【六】web后端开发-请求响应_第24张图片

package com.runa.pojo;

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

    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;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

 2.3.1.2 创建接口

package com.runa.controller;


import com.runa.pojo.User;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RequestController {
    // 1、 简单参数
//    //原始方式
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request){
        //获取请求参数
//        String name = request.getParameter("name");
//        String ageStr = request.getParameter("age");
//        int age = Integer.parseInt(ageStr);
//
//        System.out.println(name + ":" + age);
//        return "ok";
//    }

    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名相同)
//    @RequestMapping("/simpleParam")
//    public String simpleParam(String name, Integer age){
//        //获取请求参数
//        System.out.println(name + ":" + age);
//        return "ok";
//    }

    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名不相同)
//    @RequestMapping("/simpleParam")
//    public String simpleParam(String username, Integer age){
//        //获取请求参数
//        System.out.println(username + ":" + age);
//        return "ok";
//    }
    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名不相同)
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name")String username, Integer age){  //@RequestParam(name="name", required = false)
        //获取请求参数
        System.out.println(username + ":" + age);
        return "ok";
    }

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

}

 [JavaWeb]【六】web后端开发-请求响应_第25张图片

 

2.3.2 复杂实体参数

[JavaWeb]【六】web后端开发-请求响应_第26张图片

 2.3.2.1 创建实体类Address

[JavaWeb]【六】web后端开发-请求响应_第27张图片

package com.runa.pojo;

public class Address {
    private String province;
    private String city;

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "Address{" +
                "province='" + province + '\'' +
                ", city='" + city + '\'' +
                '}';
    }
}

 2.3.2.2 修改实体类User

package com.runa.pojo;

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

    public String getName() {
        return name;
    }


    public Address getAddress() {
        return address;
    }

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

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

    public Integer getAge() {
        return age;
    }

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

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

 2.3.2.3 创建接口

package com.runa.controller;


import com.runa.pojo.User;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RequestController {
    // 1、 简单参数
//    //原始方式
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request){
        //获取请求参数
//        String name = request.getParameter("name");
//        String ageStr = request.getParameter("age");
//        int age = Integer.parseInt(ageStr);
//
//        System.out.println(name + ":" + age);
//        return "ok";
//    }

    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名相同)
//    @RequestMapping("/simpleParam")
//    public String simpleParam(String name, Integer age){
//        //获取请求参数
//        System.out.println(name + ":" + age);
//        return "ok";
//    }

    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名不相同)
//    @RequestMapping("/simpleParam")
//    public String simpleParam(String username, Integer age){
//        //获取请求参数
//        System.out.println(username + ":" + age);
//        return "ok";
//    }
    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名不相同)
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name")String username, Integer age){  //@RequestParam(name="name", required = false)
        //获取请求参数
        System.out.println(username + ":" + age);
        return "ok";
    }

    // 2 实体参数
    //2.1 简单的实体参数
    @RequestMapping("/simplePojo")
    public String simplePojo(User user){
        //获取请求参数
        System.out.println(user);
        return "ok";
    }

    //2.1 复杂的实体参数
    @RequestMapping("/complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "ok";
    }

}

[JavaWeb]【六】web后端开发-请求响应_第28张图片

 

2.4 数组集合参数

[JavaWeb]【六】web后端开发-请求响应_第29张图片

2.4.1 数组参数

[JavaWeb]【六】web后端开发-请求响应_第30张图片

package com.runa.controller;


import com.runa.pojo.User;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;

@RestController
public class RequestController {
    // 1、 简单参数
//    //原始方式
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request){
        //获取请求参数
//        String name = request.getParameter("name");
//        String ageStr = request.getParameter("age");
//        int age = Integer.parseInt(ageStr);
//
//        System.out.println(name + ":" + age);
//        return "ok";
//    }

    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名相同)
//    @RequestMapping("/simpleParam")
//    public String simpleParam(String name, Integer age){
//        //获取请求参数
//        System.out.println(name + ":" + age);
//        return "ok";
//    }

    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名不相同)
//    @RequestMapping("/simpleParam")
//    public String simpleParam(String username, Integer age){
//        //获取请求参数
//        System.out.println(username + ":" + age);
//        return "ok";
//    }
    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名不相同)
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name")String username, Integer age){  //@RequestParam(name="name", required = false)
        //获取请求参数
        System.out.println(username + ":" + age);
        return "ok";
    }

    // 2 实体参数
    //2.1 简单的实体参数
    @RequestMapping("/simplePojo")
    public String simplePojo(User user){
        //获取请求参数
        System.out.println(user);
        return "ok";
    }

    //2.2 复杂的实体参数
    @RequestMapping("/complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "ok";
    }

    // 3 数组集合参数
    // 3.1 数组参数
    @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "ok";
    }

}

 [JavaWeb]【六】web后端开发-请求响应_第31张图片

 

 2.4.2 集合参数

[JavaWeb]【六】web后端开发-请求响应_第32张图片

package com.runa.controller;


import com.runa.pojo.User;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.List;

@RestController
public class RequestController {
    // 1、 简单参数
//    //原始方式
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request){
        //获取请求参数
//        String name = request.getParameter("name");
//        String ageStr = request.getParameter("age");
//        int age = Integer.parseInt(ageStr);
//
//        System.out.println(name + ":" + age);
//        return "ok";
//    }

    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名相同)
//    @RequestMapping("/simpleParam")
//    public String simpleParam(String name, Integer age){
//        //获取请求参数
//        System.out.println(name + ":" + age);
//        return "ok";
//    }

    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名不相同)
//    @RequestMapping("/simpleParam")
//    public String simpleParam(String username, Integer age){
//        //获取请求参数
//        System.out.println(username + ":" + age);
//        return "ok";
//    }
    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名不相同)
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name")String username, Integer age){  //@RequestParam(name="name", required = false)
        //获取请求参数
        System.out.println(username + ":" + age);
        return "ok";
    }

    // 2 实体参数
    //2.1 简单的实体参数
    @RequestMapping("/simplePojo")
    public String simplePojo(User user){
        //获取请求参数
        System.out.println(user);
        return "ok";
    }

    //2.2 复杂的实体参数
    @RequestMapping("/complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "ok";
    }

    // 3 数组集合参数
    // 3.1 数组参数
    @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "ok";
    }

    // 3.2 集合参数
    @RequestMapping("/listParam")
    public String listParam(@RequestParam List hobby){
        System.out.println(hobby);
        return "ok";
    }

}

 [JavaWeb]【六】web后端开发-请求响应_第33张图片

 

2.5 日期参数

[JavaWeb]【六】web后端开发-请求响应_第34张图片

package com.runa.controller;


import com.runa.pojo.User;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;

@RestController
public class RequestController {
    // 1、 简单参数
//    //原始方式
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request){
        //获取请求参数
//        String name = request.getParameter("name");
//        String ageStr = request.getParameter("age");
//        int age = Integer.parseInt(ageStr);
//
//        System.out.println(name + ":" + age);
//        return "ok";
//    }

    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名相同)
//    @RequestMapping("/simpleParam")
//    public String simpleParam(String name, Integer age){
//        //获取请求参数
//        System.out.println(name + ":" + age);
//        return "ok";
//    }

    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名不相同)
//    @RequestMapping("/simpleParam")
//    public String simpleParam(String username, Integer age){
//        //获取请求参数
//        System.out.println(username + ":" + age);
//        return "ok";
//    }
    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名不相同)
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name")String username, Integer age){  //@RequestParam(name="name", required = false)
        //获取请求参数
        System.out.println(username + ":" + age);
        return "ok";
    }

    // 2 实体参数
    //2.1 简单的实体参数
    @RequestMapping("/simplePojo")
    public String simplePojo(User user){
        //获取请求参数
        System.out.println(user);
        return "ok";
    }

    //2.2 复杂的实体参数
    @RequestMapping("/complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "ok";
    }

    // 3 数组集合参数
    // 3.1 数组参数
    @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "ok";
    }

    // 3.2 集合参数
    @RequestMapping("/listParam")
    public String listParam(@RequestParam List hobby){
        System.out.println(hobby);
        return "ok";
    }

    // 4 日期时间参数
    @RequestMapping("/dataParam")
    public String dataParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
        System.out.println(updateTime);
        return "ok";
    }

}

 [JavaWeb]【六】web后端开发-请求响应_第35张图片

 

2.6 Json参数

[JavaWeb]【六】web后端开发-请求响应_第36张图片

package com.runa.controller;


import com.runa.pojo.User;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;

@RestController
public class RequestController {
    // 1、 简单参数
//    //原始方式
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request){
        //获取请求参数
//        String name = request.getParameter("name");
//        String ageStr = request.getParameter("age");
//        int age = Integer.parseInt(ageStr);
//
//        System.out.println(name + ":" + age);
//        return "ok";
//    }

    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名相同)
//    @RequestMapping("/simpleParam")
//    public String simpleParam(String name, Integer age){
//        //获取请求参数
//        System.out.println(name + ":" + age);
//        return "ok";
//    }

    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名不相同)
//    @RequestMapping("/simpleParam")
//    public String simpleParam(String username, Integer age){
//        //获取请求参数
//        System.out.println(username + ":" + age);
//        return "ok";
//    }
    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名不相同)
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name")String username, Integer age){  //@RequestParam(name="name", required = false)
        //获取请求参数
        System.out.println(username + ":" + age);
        return "ok";
    }

    // 2 实体参数
    //2.1 简单的实体参数
    @RequestMapping("/simplePojo")
    public String simplePojo(User user){
        //获取请求参数
        System.out.println(user);
        return "ok";
    }

    //2.2 复杂的实体参数
    @RequestMapping("/complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "ok";
    }

    // 3 数组集合参数
    // 3.1 数组参数
    @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "ok";
    }

    // 3.2 集合参数
    @RequestMapping("/listParam")
    public String listParam(@RequestParam List hobby){
        System.out.println(hobby);
        return "ok";
    }

    // 4 日期时间参数
    @RequestMapping("/dataParam")
    public String dataParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
        System.out.println(updateTime);
        return "ok";
    }

    // 5 json 参数
    @RequestMapping("/jsonParam")
    public String jsonParam(@RequestBody User user){
        System.out.println(user);
        return "ok";
    }

}

 [JavaWeb]【六】web后端开发-请求响应_第37张图片

 

2.7 路径参数

[JavaWeb]【六】web后端开发-请求响应_第38张图片

 2.7.1 单个路径参数

package com.runa.controller;


import com.runa.pojo.User;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;

@RestController
public class RequestController {
    // 1、 简单参数
//    //原始方式
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request){
        //获取请求参数
//        String name = request.getParameter("name");
//        String ageStr = request.getParameter("age");
//        int age = Integer.parseInt(ageStr);
//
//        System.out.println(name + ":" + age);
//        return "ok";
//    }

    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名相同)
//    @RequestMapping("/simpleParam")
//    public String simpleParam(String name, Integer age){
//        //获取请求参数
//        System.out.println(name + ":" + age);
//        return "ok";
//    }

    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名不相同)
//    @RequestMapping("/simpleParam")
//    public String simpleParam(String username, Integer age){
//        //获取请求参数
//        System.out.println(username + ":" + age);
//        return "ok";
//    }
    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名不相同)
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name")String username, Integer age){  //@RequestParam(name="name", required = false)
        //获取请求参数
        System.out.println(username + ":" + age);
        return "ok";
    }

    // 2 实体参数
    //2.1 简单的实体参数
    @RequestMapping("/simplePojo")
    public String simplePojo(User user){
        //获取请求参数
        System.out.println(user);
        return "ok";
    }

    //2.2 复杂的实体参数
    @RequestMapping("/complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "ok";
    }

    // 3 数组集合参数
    // 3.1 数组参数
    @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "ok";
    }

    // 3.2 集合参数
    @RequestMapping("/listParam")
    public String listParam(@RequestParam List hobby){
        System.out.println(hobby);
        return "ok";
    }

    // 4 日期时间参数
    @RequestMapping("/dataParam")
    public String dataParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
        System.out.println(updateTime);
        return "ok";
    }

    // 5 json 参数
    @RequestMapping("/jsonParam")
    public String jsonParam(@RequestBody User user){
        System.out.println(user);
        return "ok";
    }

    // 6 路径 参数
    @RequestMapping("/path/{id}")
    public String pathParam(@PathVariable Integer id){
        System.out.println(id);
        return "ok";
    }

}

 [JavaWeb]【六】web后端开发-请求响应_第39张图片

 2.7.2 多个路径参数

[JavaWeb]【六】web后端开发-请求响应_第40张图片

package com.runa.controller;


import com.runa.pojo.User;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;

@RestController
public class RequestController {
    // 1、 简单参数
//    //原始方式
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request){
        //获取请求参数
//        String name = request.getParameter("name");
//        String ageStr = request.getParameter("age");
//        int age = Integer.parseInt(ageStr);
//
//        System.out.println(name + ":" + age);
//        return "ok";
//    }

    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名相同)
//    @RequestMapping("/simpleParam")
//    public String simpleParam(String name, Integer age){
//        //获取请求参数
//        System.out.println(name + ":" + age);
//        return "ok";
//    }

    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名不相同)
//    @RequestMapping("/simpleParam")
//    public String simpleParam(String username, Integer age){
//        //获取请求参数
//        System.out.println(username + ":" + age);
//        return "ok";
//    }
    //SpringBoot 方式 GET  POST 都可以(参数名与形参变量名不相同)
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name")String username, Integer age){  //@RequestParam(name="name", required = false)
        //获取请求参数
        System.out.println(username + ":" + age);
        return "ok";
    }

    // 2 实体参数
    //2.1 简单的实体参数
    @RequestMapping("/simplePojo")
    public String simplePojo(User user){
        //获取请求参数
        System.out.println(user);
        return "ok";
    }

    //2.2 复杂的实体参数
    @RequestMapping("/complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "ok";
    }

    // 3 数组集合参数
    // 3.1 数组参数
    @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "ok";
    }

    // 3.2 集合参数
    @RequestMapping("/listParam")
    public String listParam(@RequestParam List hobby){
        System.out.println(hobby);
        return "ok";
    }

    // 4 日期时间参数
    @RequestMapping("/dataParam")
    public String dataParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
        System.out.println(updateTime);
        return "ok";
    }

    // 5 json 参数
    @RequestMapping("/jsonParam")
    public String jsonParam(@RequestBody User user){
        System.out.println(user);
        return "ok";
    }

    // 6 路径 参数
    // 6。1  单个路径 参数
    @RequestMapping("/path/{id}")
    public String pathParam(@PathVariable Integer id){
        System.out.println(id);
        return "ok";
    }

    // 6。2  多个路径 参数
    @RequestMapping("/path/{id}/{name}")
    public String pathParam(@PathVariable Integer id, @PathVariable String name){
        System.out.println(id + ":" + name);
        return "ok";
    }

}

[JavaWeb]【六】web后端开发-请求响应_第41张图片

 

 2.8 总结

[JavaWeb]【六】web后端开发-请求响应_第42张图片

三 响应

[JavaWeb]【六】web后端开发-请求响应_第43张图片

 3.1 @Responbody响应示例(发现不便管理、难以维护)[JavaWeb]【六】web后端开发-请求响应_第44张图片

 3.1.1 创建类ResponseController 

[JavaWeb]【六】web后端开发-请求响应_第45张图片

package com.runa.controller;

import com.runa.pojo.Address;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * 测试响应数据
 */

@RestController
public class ResponseController {
    @RequestMapping("/helloWorld")
    public String helloWorld(){
        System.out.println("Hello World ~");
        return "Hello World ~";
    }

    @RequestMapping("/getAddr")
    public Address getAddr(){
        Address addr = new Address();
        addr.setProvince("云南");
        addr.setCity("大理");
        return addr;
    }

    @RequestMapping("/listAddr")
    public List
listAddr(){ List
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 list; } }

3.1.2 执行结果

3.1.2.1 返回字符串

[JavaWeb]【六】web后端开发-请求响应_第46张图片3.1.2.2 返回对象json

[JavaWeb]【六】web后端开发-请求响应_第47张图片 3.1.2.3 返回集合json

[JavaWeb]【六】web后端开发-请求响应_第48张图片3.2 统一响应结果

[JavaWeb]【六】web后端开发-请求响应_第49张图片

 3.2.1 统一结果处理类Result

[JavaWeb]【六】web后端开发-请求响应_第50张图片

package com.runa.pojo;

/**
 * 统一响应结果封装类
 */
public class Result {
    private Integer code ;//1 成功 , 0 失败
    private String msg; //提示信息
    private Object data; //数据 data

    public Result() {
    }
    public Result(Integer code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }

    public static Result success(Object data){
        return new Result(1, "success", data);
    }
    public static Result success(){
        return new Result(1, "success", null);
    }
    public static Result error(String msg){
        return new Result(0, msg, null);
    }

    @Override
    public String toString() {
        return "Result{" +
                "code=" + code +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }
}

 3.2.2 优化类ResponseController

package com.runa.controller;

import com.runa.pojo.Address;
import com.runa.pojo.Result;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * 测试响应数据
 */

@RestController
public class ResponseController {
    @RequestMapping("/helloWorld")
    public Result helloWorld(){
        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
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); } }

3.2.3 执行结果(返回统一)

[JavaWeb]【六】web后端开发-请求响应_第51张图片

[JavaWeb]【六】web后端开发-请求响应_第52张图片

 [JavaWeb]【六】web后端开发-请求响应_第53张图片

 3.3 总结

[JavaWeb]【六】web后端开发-请求响应_第54张图片

 3.4 统一响应结果的案例

[JavaWeb]【六】web后端开发-请求响应_第55张图片

 3.4.1 分析步骤

[JavaWeb]【六】web后端开发-请求响应_第56张图片

3.4.2 引入dom4j 



    org.dom4j
    dom4j
    2.1.3

 [JavaWeb]【六】web后端开发-请求响应_第57张图片

3.4.3 引入工具类XmlParserUtils 

[JavaWeb]【六】web后端开发-请求响应_第58张图片

package com.runa.utils;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class XmlParserUtils {

    public static  List parse(String file , Class targetClass)  {
        ArrayList list = new ArrayList(); //封装解析出来的数据
        try {
            //1.获取一个解析器对象
            SAXReader saxReader = new SAXReader();
            //2.利用解析器把xml文件加载到内存中,并返回一个文档对象
            Document document = saxReader.read(new File(file));
            //3.获取到根标签
            Element rootElement = document.getRootElement();
            //4.通过根标签来获取 user 标签
            List elements = rootElement.elements("emp");

            //5.遍历集合,得到每一个 user 标签
            for (Element element : elements) {
                //获取 name 属性
                String name = element.element("name").getText();
                //获取 age 属性
                String age = element.element("age").getText();
                //获取 image 属性
                String image = element.element("image").getText();
                //获取 gender 属性
                String gender = element.element("gender").getText();
                //获取 job 属性
                String job = element.element("job").getText();

                //组装数据
                Constructor constructor = targetClass.getDeclaredConstructor(String.class, Integer.class, String.class, String.class, String.class);
                constructor.setAccessible(true);
                T object = constructor.newInstance(name, Integer.parseInt(age), image, gender, job);

                list.add(object);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

}

3.4.4 引入实体类 Emp

[JavaWeb]【六】web后端开发-请求响应_第59张图片

package com.runa.pojo;

public class Emp {
    private String name;
    private Integer age;
    private String image;
    private String gender;
    private String job;

    public Emp() {
    }

    public Emp(String name, Integer age, String image, String gender, String job) {
        this.name = name;
        this.age = age;
        this.image = image;
        this.gender = gender;
        this.job = job;
    }

    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 String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", image='" + image + '\'' +
                ", gender='" + gender + '\'' +
                ", job='" + job + '\'' +
                '}';
    }
}

 3.4.5 引入emp.xml文件

[JavaWeb]【六】web后端开发-请求响应_第60张图片



    
        金毛狮王
        55
        https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/1.jpg
        
        1
        
        1
    

    
        白眉鹰王
        65
        https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/2.jpg
        1
        1
    

    
        青翼蝠王
        45
        https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/3.jpg
        1
        2
    

    
        紫衫龙王
        38
        https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/4.jpg
        2
        3
    

 3.4.6 引入前端页面

 [JavaWeb]【六】web后端开发-请求响应_第61张图片

 3.4.7 新增EmpController类

[JavaWeb]【六】web后端开发-请求响应_第62张图片

package com.runa.controller;

import com.runa.pojo.Emp;
import com.runa.pojo.Result;
import com.runa.utils.XmlParserUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class EmpController {
    @RequestMapping("/listEmp")
    public Result list(){
        // 1 加载并解析XML 文件

        String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
        System.out.println(file);
        List emplist = XmlParserUtils.parse(file, Emp.class);

        // 2 对数据进行转换处理  gender job
        empList.stream().forEach(emp ->{
            // 处理gender 1  男  2  女
            String gender = emp.getGender();
            if("1".equals(gender)){
                emp.setGender("男");
            } else if ("2".equals(gender)) {
                emp.setGender("女");

            }

            // 处理 job  1 讲师 2 班主任  3 就业指导
            String job = emp.getJob();
            if("1".equals(job)){
                emp.setJob("讲师");
            } else if ("2".equals(job)) {
                emp.setJob("班主任");}
            else if ("3".equals(job)) {
                emp.setJob("就业指导");
            }
        });


        // 3 响应数据
        return Result.success(empList);
    }
}

3.4.8 访问

浏览器 

http://localhost:8080/emp.html

[JavaWeb]【六】web后端开发-请求响应_第63张图片

[JavaWeb]【六】web后端开发-请求响应_第64张图片

 [JavaWeb]【六】web后端开发-请求响应_第65张图片

 3.4.9 思考

[JavaWeb]【六】web后端开发-请求响应_第66张图片

四 分层解耦

4.1 三层架构

4.1.1 概述

[JavaWeb]【六】web后端开发-请求响应_第67张图片

[JavaWeb]【六】web后端开发-请求响应_第68张图片

[JavaWeb]【六】web后端开发-请求响应_第69张图片

 [JavaWeb]【六】web后端开发-请求响应_第70张图片

 4.1.2 Dao层

4.1.2.1  新增EmpDao接口

package com.runa.dao;

import com.runa.pojo.Emp;

import java.util.List;

public interface EmpDao {
    // 获取员工列表数据
    public List listEmap();
}

4.1.2.2 新增EmpDaoA实现类

package com.runa.dao.impl;

import com.runa.dao.EmpDao;
import com.runa.pojo.Emp;
import com.runa.utils.XmlParserUtils;

import java.util.List;

public class EmpDaoA implements EmpDao {
    @Override
    public List listEmap() {
        // 1 加载并解析XML 文件
        String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
        System.out.println(file);
        List emplist = XmlParserUtils.parse(file, Emp.class);
        return emplist;
    }
}

4.1.3 Service层

4.1.3.1 新增EmpService接口

package com.runa.service;

import com.runa.pojo.Emp;

import java.util.List;

public interface EmpService {
    // 获取员工列表
    public List listEmp();
}

4.1.3.2 新增EmpServiceA实现类

package com.runa.service.impl;

import com.runa.dao.EmpDao;
import com.runa.dao.impl.EmpDaoA;
import com.runa.pojo.Emp;
import com.runa.service.EmpService;

import java.util.List;

public class EmpServiceA implements EmpService {
    private EmpDao empDao = new EmpDaoA();
    @Override
    public List listEmp() {

        //1 调用dao, 获取数据
        List empList = empDao.listEmap();

        // 2 对数据进行转换处理  gender job
        empList.stream().forEach(emp ->{
            // 处理gender 1  男  2  女
            String gender = emp.getGender();
            if("1".equals(gender)){
                emp.setGender("男");
            } else if ("2".equals(gender)) {
                emp.setGender("女");

            }

            // 处理 job  1 讲师 2 班主任  3 就业指导
            String job = emp.getJob();
            if("1".equals(job)){
                emp.setJob("讲师");
            } else if ("2".equals(job)) {
                emp.setJob("班主任");}
            else if ("3".equals(job)) {
                emp.setJob("就业指导");
            }
        });

        return empList;
    }
}

4.1.3 Controller层

4.1.3.1 优化EmpController

package com.runa.controller;

import com.runa.pojo.Emp;
import com.runa.pojo.Result;
import com.runa.service.EmpService;
import com.runa.service.impl.EmpServiceA;
import com.runa.utils.XmlParserUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class EmpController {
    private EmpService empService = new EmpServiceA();
    @RequestMapping("/listEmp")
    public Result list(){

        // 1 调用service,获取数据
        List empList = empService.listEmp();

        // 2 响应数据
        return Result.success(empList);
    }


}

 启动

[JavaWeb]【六】web后端开发-请求响应_第71张图片

4.1.4 对比

[JavaWeb]【六】web后端开发-请求响应_第72张图片

4.2 分层解耦

[JavaWeb]【六】web后端开发-请求响应_第73张图片

 4.2.1 解耦

[JavaWeb]【六】web后端开发-请求响应_第74张图片

 [JavaWeb]【六】web后端开发-请求响应_第75张图片

 [JavaWeb]【六】web后端开发-请求响应_第76张图片

4.3 IOC(控制反转) & DI(依赖注入)入门

[JavaWeb]【六】web后端开发-请求响应_第77张图片

 4.3.1 优化EmpDaoA实现类

package com.runa.dao.impl;

import com.runa.dao.EmpDao;
import com.runa.pojo.Emp;
import com.runa.utils.XmlParserUtils;
import org.springframework.stereotype.Component;

import java.util.List;

@Component  // 将当前类交给IOC容器管理,成为IOC容器的bean
public class EmpDaoA implements EmpDao {
    @Override
    public List listEmap() {
        // 1 加载并解析XML 文件
        String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
        System.out.println(file);
        List emplist = XmlParserUtils.parse(file, Emp.class);
        return emplist;
    }
}

’4.3.2 优化EmpServiceA实现类

package com.runa.service.impl;

import com.runa.dao.EmpDao;
import com.runa.dao.impl.EmpDaoA;
import com.runa.pojo.Emp;
import com.runa.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;

@Component  // 将当前类交给IOC容器管理,成为IOC容器的bean
public class EmpServiceA implements EmpService {
//    private EmpDao empDao = new EmpDaoA();
    @Autowired // 代表程序在运行时,IOC容器会提供该类型的bean对象,并赋值给该变量,===依赖注入
    private EmpDao empDao; //解耦
    @Override
    public List listEmp() {

        //1 调用dao, 获取数据
        List empList = empDao.listEmap();

        // 2 对数据进行转换处理  gender job
        empList.stream().forEach(emp ->{
            // 处理gender 1  男  2  女
            String gender = emp.getGender();
            if("1".equals(gender)){
                emp.setGender("男");
            } else if ("2".equals(gender)) {
                emp.setGender("女");

            }

            // 处理 job  1 讲师 2 班主任  3 就业指导
            String job = emp.getJob();
            if("1".equals(job)){
                emp.setJob("讲师");
            } else if ("2".equals(job)) {
                emp.setJob("班主任");}
            else if ("3".equals(job)) {
                emp.setJob("就业指导");
            }
        });

        return empList;
    }
}

 4.3.3 优化EmpController类

package com.runa.controller;

import com.runa.pojo.Emp;
import com.runa.pojo.Result;
import com.runa.service.EmpService;
import com.runa.service.impl.EmpServiceA;
import com.runa.utils.XmlParserUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class EmpController {
//    private EmpService empService = new EmpServiceA();
    @Autowired   // 代表程序在运行时,IOC容器会提供该类型的bean对象,并赋值给该变量,===依赖注入
    private EmpService empService; //解耦
    @RequestMapping("/listEmp")
    public Result list(){

        // 1 调用service,获取数据
        List empList = empService.listEmp();

        // 2 响应数据
        return Result.success(empList);
    }


}

 [JavaWeb]【六】web后端开发-请求响应_第78张图片

4.3.4 如何更改为:实现类EmpserviceB

 如果要更换成新的实现类EmpserviceB,只需要将EmpserviceA 的注解@Component 去掉,实现类EmpserviceB加上注解@Component 

 4.3.5 总结

[JavaWeb]【六】web后端开发-请求响应_第79张图片

 [JavaWeb]【六】web后端开发-请求响应_第80张图片

4.4 IOC详解

[JavaWeb]【六】web后端开发-请求响应_第81张图片

 4.4.1 优化EmpDaoA实现类

package com.runa.dao.impl;

import com.runa.dao.EmpDao;
import com.runa.pojo.Emp;
import com.runa.utils.XmlParserUtils;
import org.springframework.stereotype.Component;

import java.util.List;

//@Component  // 将当前类交给IOC容器管理,成为IOC容器的bean
@Repository
public class EmpDaoA implements EmpDao {
    @Override
    public List listEmap() {
        // 1 加载并解析XML 文件
        String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
        System.out.println(file);
        List emplist = XmlParserUtils.parse(file, Emp.class);
        return emplist;
    }
}

’4.4.2 优化EmpServiceA实现类

package com.runa.service.impl;

import com.runa.dao.EmpDao;
import com.runa.dao.impl.EmpDaoA;
import com.runa.pojo.Emp;
import com.runa.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;
//@Component  // 将当前类交给IOC容器管理,成为IOC容器的bean
@Service
public class EmpServiceA implements EmpService {
//    private EmpDao empDao = new EmpDaoA();
    @Autowired // 代表程序在运行时,IOC容器会提供该类型的bean对象,并赋值给该变量,===依赖注入
    private EmpDao empDao; //解耦
    @Override
    public List listEmp() {

        //1 调用dao, 获取数据
        List empList = empDao.listEmap();

        // 2 对数据进行转换处理  gender job
        empList.stream().forEach(emp ->{
            // 处理gender 1  男  2  女
            String gender = emp.getGender();
            if("1".equals(gender)){
                emp.setGender("男");
            } else if ("2".equals(gender)) {
                emp.setGender("女");

            }

            // 处理 job  1 讲师 2 班主任  3 就业指导
            String job = emp.getJob();
            if("1".equals(job)){
                emp.setJob("讲师");
            } else if ("2".equals(job)) {
                emp.setJob("班主任");}
            else if ("3".equals(job)) {
                emp.setJob("就业指导");
            }
        });

        return empList;
    }
}

 4.4.3 优化EmpController类

package com.runa.controller;

import com.runa.pojo.Emp;
import com.runa.pojo.Result;
import com.runa.service.EmpService;
import com.runa.service.impl.EmpServiceA;
import com.runa.utils.XmlParserUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController   //有@RestController就不需要使用 @Controller ,因为他包含了
public class EmpController {
//    private EmpService empService = new EmpServiceA();
    @Autowired   // 代表程序在运行时,IOC容器会提供该类型的bean对象,并赋值给该变量,===依赖注入
    private EmpService empService; //解耦
    @RequestMapping("/listEmp")
    public Result list(){

        // 1 调用service,获取数据
        List empList = empService.listEmp();

        // 2 响应数据
        return Result.success(empList);
    }


}

 [JavaWeb]【六】web后端开发-请求响应_第82张图片

4.4.4 bean组件扫描

[JavaWeb]【六】web后端开发-请求响应_第83张图片

 4.4.5 总结

[JavaWeb]【六】web后端开发-请求响应_第84张图片

 4.5 DI详解

[JavaWeb]【六】web后端开发-请求响应_第85张图片

4.5.1 @Primary

[JavaWeb]【六】web后端开发-请求响应_第86张图片

 4.5.2 @Qualifier

[JavaWeb]【六】web后端开发-请求响应_第87张图片

[JavaWeb]【六】web后端开发-请求响应_第88张图片

 4.5.3 @Resource

[JavaWeb]【六】web后端开发-请求响应_第89张图片

 4.5.3 总结

[JavaWeb]【六】web后端开发-请求响应_第90张图片

 

你可能感兴趣的:(java,开发语言)