Springboot和postman的使用

1.入门

  • 在这里插入图片描述
    • Spring Boot : 快速方便地构建出一个Spring程序
    • Spring Framework :Spring框架,最底层最基础的框架
    • Spring Data : 封装了一系列访问数据库的技术
    • Spring Cloud : 用来构建微服务项目
    • Spring Security : 安全框架

2.创建项目

  • 1.在这里插入图片描述
  • 2在这里插入图片描述在这里插入图片描述
  • 3.创建好后,有些文件可以删除
    在这里插入图片描述

3.HTTP

4.请求响应

在这里插入图片描述
在这里插入图片描述

5.简单参数的接收

在这里插入图片描述

  • 简单参数
    在这里插入图片描述
  • springboot方式
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
package com.example.springboot_web_start.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 {
    //springmvc方式
//    @RequestMapping("simpleParam")
//    public String simpleParam(HttpServletRequest request){
//        String name = request.getParameter("name");
//        String ageStr = request.getParameter("name");
//        int age = Integer.parseInt(ageStr);
//        System.out.println(name + " " + age);
//        return "success";
//    }
    //#################################################
    //springboot方式
//    @RequestMapping("simpleParam")
//    public String simpleParam(String name, Integer age){
//
//        System.out.println(name + " " + age);
//        return "success";
//    }
    //#################################################
    //当方法形参名称和请求参数名称不匹配的时候,使用@RequestParam注解
    @RequestMapping("simpleParam")
    public String simpleParam(@RequestParam(name="name") String username, Integer age){

        System.out.println(username + " " + age);
        return "success";
    }
}

6.实体参数的接收

  • 规则:请求参数名和形参对象属性名相同
  • 简单实体参数在这里插入图片描述
package com.example.springboot_web_start.pojo;

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

   


    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
///////////////////////////////////////////////////////////////////////////////////////////
package com.example.springboot_web_start.controller;

import com.example.springboot_web_start.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 {
    //2.实体参数
    @RequestMapping("simplePojo")
    public String simplePojo(User user){
        System.out.println(user);
        return "success";
    }
}

  • 复杂实体参数
package com.example.springboot_web_start.pojo;

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

    public String getAddress() {
        return address;
    }

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

    public String getCity() {
        return city;
    }

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

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

package com.example.springboot_web_start.pojo;

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

    private Address address;

    public Address getAddress() {
        return address;
    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package com.example.springboot_web_start.controller;

import com.example.springboot_web_start.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 {
       //复杂实体参数
    @RequestMapping("complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "success";
    }
}

7.数组集合参数

  • 数组:请求参数名和形参中的数组变量名相同,可以直接使用数组封装
  • 请求参数名和形参中集合变量名相同,通过@RequestParam绑定参数关系
    在这里插入图片描述在这里插入图片描述
  //3.数组参数
    @RequestMapping("arrayParam")
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "success";
    }
    //集合参数
    @RequestMapping("listParam")
    public String listParam(@RequestParam(name="hobby") List<String> hobby){
        System.out.println(hobby);
        return "success";
    }

8.日期参数

在这里插入图片描述

 //4.日期时间参数
    @RequestMapping("dateParam")//指定请求路径
    public String dateParam(@DateTimeFormat(pattern ="yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
        System.out.println(updateTime);
        return "success";
    }

9.JSON参数

在这里插入图片描述

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

10.路径参数

  • 一个参数在这里插入图片描述
  • 多个参数在这里插入图片描述
//6.路径参数
    @RequestMapping("pathVariable/{id}")//指定请求路径
    public String pathVariable(@PathVariable Integer id){
        System.out.println(id);
        return "success";
    }
    //多个参数
    @RequestMapping("pathVariable/{id}/{name}")//指定请求路径
    public String pathVariable(@PathVariable Integer id, @PathVariable String name){
        System.out.println(id + " " + name);
        return "success";
    }
  • 总结
    在这里插入图片描述

11.响应

  • @ResponseBody
    • 位置:Controller类上/方法上
    • 作用:将方法返回值直接响应,若返回值类型是 实体对象/集合 转JSON格式在这里插入图片描述
  • 响应回去的数据没有规范:不方便管理
package com.example.springboot_web_start.controller;

import com.example.springboot_web_start.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("/hello")
    public String hello(){
        System.out.println("hell");
        return "hello";
    }
    //返回对象
    @RequestMapping("/getAddr")
    public Address getAddr(){
        Address address = new Address();
        address.setCity("北京");
        address.setAddress("长安街");
        return address;
    }
    //返回list集合
    @RequestMapping("/getAddrList")
    public List<Address> getAddrList(){
        List<Address> addressList = new ArrayList<>();
        Address address1 = new Address();
        address1.setCity("北京");
        address1.setAddress("长安街");
        addressList.add(address1);

        Address address2 = new Address();
        address2.setCity("上海");
        address2.setAddress("南京路");
        addressList.add(address2);

        return addressList;
    }
}

  • 方法:同一响应结果
  • Result(code ,msg ,data)在这里插入图片描述
package com.example.springboot_web_start.pojo;
/*
统一响应结果封装类
*/
public class Result {
   private Integer code;//1 成功 0 失败
   private String msg;//提示信息
   private Object 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,"操作成功",data);
   }
   public static Result error(Object data){
       return new Result(0,"操作失败",null);
   }
   public static Result error(String msg,Object data){
       return new Result(0,msg,null);
   }
   @Override
   public String toString() {
       return "Result{" +
               "code=" + code +
               ", msg='" + msg + '\'' +
               ", data=" + data +
               '}';
   }
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//返回字符串
@RequestMapping("/hello")
public Result hello(){
   System.out.println("hell");
//    return new Result(1,"success","hello");
   return Result.success("hello");
}
   //返回对象
   @RequestMapping("/getAddr")
   public Result getAddr(){
       Address address = new Address();
       address.setCity("北京");
       address.setAddress("长安街");
       return Result.success(address);
   }
   //返回list集合
   @RequestMapping("/getAddrList")
   public Result getAddrList(){
       List<Address> addressList = new ArrayList<>();
       Address address1 = new Address();
       address1.setCity("北京");
       address1.setAddress("长安街");
       addressList.add(address1);

       Address address2 = new Address();
       address2.setCity("上海");
       address2.setAddress("南京路");
       addressList.add(address2);

       return Result.success(addressList);
   }
  • 统一响应案例
  • 在这里插入图片描述
  • 在这里插入图片描述

12.分层解耦

在这里插入图片描述在这里插入图片描述

  • 分层后代码
    在这里插入图片描述
  • 内聚:软件中各个功能模块内部的功能联系
  • 耦合:衡量软件中各个层/模块之间的依赖,关联的程度
  • 软件设计原则:高内聚低耦合
    • 高内聚:模块内部的功能联系越紧密越好(在一个模块中只存放与该模块有关的相关处理)
    • 低耦合: 降低层与层之间/模块与模块之间的依赖关联
      在这里插入图片描述
  • IOC 与 DI入门在这里插入图片描述
  • 解耦例子
    • @Component(控制反转) //将当前类交给IOC容器管理,成为IOC容器中的 bean
    • @Autowired(依赖注入) //运行时,IOC容器会提供该类型的bean对象,并赋值给该变量
      在这里插入图片描述在这里插入图片描述在这里插入图片描述
  • IOC详解
    • 指将对象的控制权交给IOC容器,由IOC容器来创建及管理这些对象,ioc中的对象也称为bean对象,@component可以用来声明一个bean对象
    • 在这里插入图片描述
    • @Controller,@Service,@Repository 分别对应Controller,Service,Dao层的注解;@Component用于不属于这三个在内的
    • 在这里插入图片描述
  • @ComponentScan //默认扫描当前包及其子包
  • DI详解
    • 在这里插入图片描述在这里插入图片描述
      在这里插入图片描述
  • 在这里插入图片描述

13.配置优先级

命令行参数 > java系统属性 > application.properties > application.yml > application.yaml
在这里插入图片描述在这里插入图片描述

  • 在项目打包后如何制定java属性和命令行参数(优先级高于java属性参数)
    在这里插入图片描述
    • 在右侧Maven中 --> 点击Lifecycle --> package双击 – > 左侧target目录下-- > Open in – > Explorer – > 在文件中找到jar包 – > 在路径输入cmd,进入命令行–> (设置java属性,命令行参数在args里设置)java[options] - jar<jar 文件名>[args]
  • 在这里插入图片描述

14.Bean管理

  • 获取bean
    在这里插入图片描述
    • 会把其中的bean创建好,会受到作用域及延迟初始化影响,这里主要针对于默认的单例非延迟加载的bean而言

在这里插入图片描述

  • bean作用域
    • 在这里插入图片描述在这里插入图片描述
      • 案例
    • 单例在这里插入图片描述
    • 非单例
    • 在这里插入图片描述
      在这里插入图片描述
  • 第三方bean
    • 在这里插入图片描述

    • 在这里插入图片描述

    • 启动类里的声明注释掉在这里插入图片描述

    • 配置类

    • 在这里插入图片描述

    • -AliasFor是别名

    • 在这里插入图片描述

    • 可以通过注解的name/value属性指定bean的名称,未指定的话还是使用默认方法名saxReader

      • 如果第三方bean需要依赖其他bean对象,直接zaibean定义方法中设置形参即可,容器会根据类型自动匹配
    • 另一种配置注入

    • 在这里插入图片描述

  • @Component 及衍生注解与@Bean注解使用场景
    • 项目中自己定义的使用@Component及其衍生注解
    • 项目中引入第三方的,使用@Bean注解

15.Springboot原理

  • 前提:引入依赖,版本必须匹配
    在这里插入图片描述
  • 自动配置
    • 在这里插入图片描述

    • 在这里插入图片描述

    • Springboot只能扫描启动类所在包及其子包

    • 原理

      • 方案一缺点:使用繁琐,性能低

      • 案例:扫描两个包
        在这里插入图片描述
        在这里插入图片描述在这里插入图片描述在这里插入图片描述

      • 在这里插入图片描述

        • 1.普通类在这里插入图片描述

        • 2.配置类
          在这里插入图片描述
          在这里插入图片描述

        • 3.ImportSelector
          在这里插入图片描述在这里插入图片描述在这里插入图片描述

        • 4.@EnableXxx注解
          在这里插入图片描述
          在这里插入图片描述

        • //ctrl+f 搜索,两次shift看原码

        • 自动配置原理
          在这里插入图片描述在这里插入图片描述
          • (@EnableAutoConfiguration)AutoConfigureImportSelector里面实现了selectImports这个方法,String数组封装的是要导入spring ioc容器的类的全类名

          • 注意是按条件装配(@ConditionalMissBean)

          • 在这里插入图片描述

          • 1.在这里插入图片描述

          • 2.在这里插入图片描述
            //该类型指的是声明的类型,没有这个bean才会声明这个类型
            在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
//在该文件中存在name的值才会将bean加入ioc容器中
在这里插入图片描述

      • 在这里插入图片描述
        - 案例
         在这里插入图片描述
        • 步骤:
          • 1.创建两个模块(starter依赖管理;autoconfigure自动配置):autoconfigure修改版本为2.7.5,依赖只剩下spring-boot-starter,只留下src与.iml文件,src文件里启动类和.properties还有测试类都删掉,作为第三方模块
            在这里插入图片描述

          • 2.在starter文件中添加autoconfigure依赖
            在这里插入图片描述

            • 3.在autoconfigure里定义AliOSSProperties工具类在这里插入图片描述

            • 添加依赖

            • 阿里云工具类在这里插入图片描述在这里插入图片描述
              在这里插入图片描述在这里插入图片描述

            • 4.创建配置类在这里插入图片描述

            • 5.创建resources下的文件
              在这里插入图片描述

            • 6.创建测试类

            • 添加starter依赖在这里插入图片描述

            • 配置.yml文件在这里插入图片描述

            • 测试方法在这里插入图片描述

16.总结

  • web开发基于三层架构在这里插入图片描述

    • Controller层负责接收请求
    • Service层具体业务逻辑处理
    • Dao层(数据访问层也叫持久层)用来处理数据访问操作 ,对数据库的数据进行增删改查
    • 流程:前端发出请求,Controller调用service进行逻辑处理,service调用daoceng完成数据访问操作
    • 执行具体业务处理之前的一些通用操作,需要借助java -web中三大组件之一的过滤器filter/或者拦截器intercepter在这里插入图片描述
    • 实现三层架构之间的解耦,需要使用IOC(控制反转:将对象创建的控制权由应用程序自身交给外部容器’ioc容器 / spring容器’ ,声明为spring容器中的bean对象) 和 DI(依赖注入 : 指容器为程序提供运行时所需的资源)
  • 拦截器和全局异常处理属于Spring framework-web ,springMVC属于Spring framework在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值