[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 总结


一  引子

二 请求

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(参数名与形参变量名不相同)

 参数不同 获取null

 

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

 此问题是解决2.2.4的问题

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";
    }
}

 

2.3 实体参数

2.3.1 简单的实体类参数

2.3.1.1 创建实体类User

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";
    }

}

 

 

2.3.2 复杂实体参数

 2.3.2.1 创建实体类Address

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";
    }

}

 

2.4 数组集合参数

2.4.1 数组参数

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";
    }

}

 

 

 2.4.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;

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<String> hobby){
        System.out.println(hobby);
        return "ok";
    }

}

 

 

2.5 日期参数

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<String> 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";
    }

}

 

 

2.6 Json参数

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<String> 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";
    }

}

 

 

2.7 路径参数

 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<String> 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";
    }

}

 

 2.7.2 多个路径参数

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<String> 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";
    }

}

 

 2.8 总结

三 响应

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

 3.1.1 创建类ResponseController 

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<Address> listAddr(){
        List<Address> 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 返回字符串

3.1.2.2 返回对象json

 3.1.2.3 返回集合json

3.2 统一响应结果

 3.2.1 统一结果处理类Result

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<Address> 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 执行结果(返回统一)

 

 3.3 总结

 3.4 统一响应结果的案例

 3.4.1 分析步骤

3.4.2 引入dom4j 

<!-- 解析XML -->
<dependency>
    <groupId>org.dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>2.1.3</version>
</dependency>

 

3.4.3 引入工具类XmlParserUtils 

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

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文件

<?xml version="1.0" encoding="UTF-8" ?>
<emps>
    <emp>
        <name>金毛狮王</name>
        <age>55</age>
        <image>https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/1.jpg</image>
        <!-- 1: 男, 2: 女 -->
        <gender>1</gender>
        <!-- 1: 讲师, 2: 班主任 , 3: 就业指导 -->
        <job>1</job>
    </emp>

    <emp>
        <name>白眉鹰王</name>
        <age>65</age>
        <image>https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/2.jpg</image>
        <gender>1</gender>
        <job>1</job>
    </emp>

    <emp>
        <name>青翼蝠王</name>
        <age>45</age>
        <image>https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/3.jpg</image>
        <gender>1</gender>
        <job>2</job>
    </emp>

    <emp>
        <name>紫衫龙王</name>
        <age>38</age>
        <image>https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/4.jpg</image>
        <gender>2</gender>
        <job>3</job>
    </emp>
</emps>

 3.4.6 引入前端页面

 

 3.4.7 新增EmpController类

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<Emp> 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

 

 3.4.9 思考

四 分层解耦

4.1 三层架构

4.1.1 概述

 

 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<Emp> 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<Emp> listEmap() {
        // 1 加载并解析XML 文件
        String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
        System.out.println(file);
        List<Emp> 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<Emp> 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<Emp> listEmp() {

        //1 调用dao, 获取数据
        List<Emp> 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<Emp> empList = empService.listEmp();

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


}

 启动

4.1.4 对比

4.2 分层解耦

 4.2.1 解耦

 

 

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

 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<Emp> listEmap() {
        // 1 加载并解析XML 文件
        String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
        System.out.println(file);
        List<Emp> 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<Emp> listEmp() {

        //1 调用dao, 获取数据
        List<Emp> 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<Emp> empList = empService.listEmp();

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


}

 

4.3.4 如何更改为:实现类EmpserviceB

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

 4.3.5 总结

 

4.4 IOC详解

 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<Emp> listEmap() {
        // 1 加载并解析XML 文件
        String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
        System.out.println(file);
        List<Emp> 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<Emp> listEmp() {

        //1 调用dao, 获取数据
        List<Emp> 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<Emp> empList = empService.listEmp();

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


}

 

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 总结

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/80421.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为AI而生的数据库:Milvus详解及实战

1 向量数据库 1.1 向量数据库的由来 在当今数字化时代&#xff0c;人工智能AI正迅速改变着我们的生活和工作方式。从智能助手到自动驾驶汽车&#xff0c;AI正在成为各行各业的创新引擎。然而&#xff0c;这种AI的崛起也带来了一个关键的挑战&#xff1a;如何有效地处理和分析…

spring boot 整合支付宝微信支付

1.目录结构 2.引入依赖 <!--引入阿里支付--><dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.11.8.ALL</version></dependency><!--引入微信支付--><depe…

Ajax入门+aixos+HTTP协议

一.Ajax入门 概念:AJAX是浏览器与服务器进行数据通信的技术 axios使用: 引入axios.js使用axios函数:传入配置对象,再用.then回调函数接受结果,并做后续处理 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>01.axios使用…

[bug] 记录version `GLIBCXX_3.4.29‘ not found 解决方法

在使用mediapipe 这个库的时候&#xff0c;首次使用出现 GLIBCXX_3.4.29’ not found 错误&#xff0c; 看起来是安装mediapipe 的时候自动升级了 matplotlib 这个库&#xff0c;导致依赖的 libstd.so 版本不满足了&#xff0c;GLIBCXX_3.4.29 is an object from libstdc.so.…

香港ITA2023高峰论坛,Dtop环球嘉年华亚洲环球节点受邀出席

Web 3.0回归,建构黄金新起点。Web 3.0是数字技术与经济体系融合性的创新框架,是未来网络产业发展的趋势。为加速推进创新科技与文化艺术的融合发展,充分利用香港的国际化优势和开放的政策环境,汇聚全球资源,助力香港国际创新科技中心和中外文化艺术交流中心的进一步建设和发展,…

财务数据分析之现金流量表模板分享

现金流量表是我们常说的财务数据分析三表之一。它可以呈现一个企业的现金流情况&#xff0c;揭示企业经营管理健康状态&#xff0c;但在实际使用中却有总给人一种用不上、用不好的矛盾感。怎么才能把现金流量表做好&#xff1f;不如借鉴下大神的现金流量表模板。 下面介绍的是…

Docker 的基本概念和优势,在应用程序开发中的实际应用。

Docker是一个开源的容器化平台&#xff0c;让开发者能够轻松地打包、运输和运行应用程序。其基本概念包括&#xff1a; 镜像(Image)&#xff1a;一个镜像是一个只读的软件包&#xff0c;它包含了运行应用所需的所有代码、库文件、环境变量和配置文件等。 容器(Container)&…

Flink源码之StreamTask启动流程

每个ExecutionVertex分配Slot后&#xff0c;JobMaster就会向Slot所在的TaskExecutor提交RPC请求执行Task&#xff0c;接口为TaskExecutorGateway::submitTask CompletableFuture<Acknowledge> submitTask(TaskDeploymentDescriptor tdd, JobMasterId jobMasterId, RpcTi…

电脑系统重装日记

重装原因 电脑C盘几乎爆炸故重装系统一清二白 此片原因 记录重装过程&#xff0c;强调一些要注意的点&#xff0c;以防日后重装。 重装过程 1.清空电脑文件后重启&#xff0c;电脑冒蓝光&#xff0c;一直蓝屏反复重启&#xff0c;故只能重装系统以解难题。 2.准备一个U盘&…

牛客网华为OD前端岗位,面试题库练习记录01

题目一 质数因子 功能:输入一个正整数&#xff0c;按照从小到大的顺序输出它的所有质因子&#xff08;重复的也要列举&#xff09;&#xff08;如180的质因子为2 2 3 3 5 &#xff09; JavaScript Node ACM模式 const rl require("readline").createInterface({ i…

【Diffusion】李宏毅2023机器学习Diffusion笔记

文章目录 1 想法概述2 实际过程阶段1 Add Noise阶段2 Denoise 3 数学原理4 为什么推理时要额外加入noise5 一些不知道对不对的Summary 1 想法概述 从一张充满噪声的图中不断denoise&#xff0c;最终得到一张clear的图片。为了确定当前图片中噪声占比的大小&#xff0c;同时输入…

微服务-Nacos(注册中心)

Nacos是SpringCloud的一个功能非常强大的组件&#xff0c;想比eureka的功能更加丰富 官方的nacos简介 Nacos&#xff08;全称&#xff1a;Naming and Configuration Service&#xff09;是一个开源的动态服务发现、配置管理和服务管理平台。它由阿里巴巴集团开发并贡献给开源…

使用PostgreSQL构建强大的Web应用程序:最佳实践和建议

PostgreSQL是一个功能强大的开源关系型数据库,它拥有广泛的用户群和活跃的开发社区。越来越多的Web应用选择PostgreSQL作为数据库 backend。如何充分利用PostgreSQL的特性来构建健壮、高性能的Web应用?本文将给出一些最佳实践和建议。 一、选择合适的PostgreSQL数据类型 Pos…

SAP ABAP 直接把内表转换成PDF格式(smartform的打印函数输出OTF格式数据)

直接上代码&#xff1a; REPORT zcycle055.DATA: lt_tab TYPE TABLE OF zpps001. DATA: ls_tab TYPE zpps001.ls_tab-werks 1001. ls_tab-gamng 150.00. ls_tab-gstrp 20201202. ls_tab-aufnr 000010000246. ls_tab-auart 标准生产. ls_tab-gltrp 20201205. ls_tab-matn…

idea中Maven报错Unable to import maven project: See logs for details问题的解决方法

idea中Maven报错Unable to import maven project: See logs for details问题的解决方法。 在查看maven的环境配置和idea的maven配置后&#xff0c;发现是idea 2020版本和maven 3.9.3版本的兼容性问题。在更改为Idea自带的maven 3.6.1版本后问题解决&#xff0c;能成功下载jar包…

【MATLAB基础绘图第16棒】绘制热图(Heatmap)

热图&#xff08;Heatmap&#xff09; 热图的主要作用是直观展示重点研究对象的差异情况&#xff0c;多用于经济学与工学差异性分析之中。 heatmap函数创建热图 语法 hheatmap(tbl,xvar,yvar) hheatmap(tbl,xvar,yvar,ColorVariable,cvar) hheatmap(cdata) hheatmap(xvalue…

产品经理必知必会0.2

Q1:产品经理需要具备的能力&#xff1f; A:硬实力&#xff1a;产品设计、需求分析、竞品分析、数据分析、撰写文档 软实力&#xff1a;沟通能力、学习能力、用户思维、主动性、好奇心、同理心、责任心、抗压能力、目标导向.... 扩展能力&#xff1a;商业思维、市场敏感度... Q…

【C++】STL---list

STL---list 一、list 的介绍二、list 的模拟实现1. list 节点类2. list 迭代器类&#xff08;1&#xff09;前置&#xff08;2&#xff09;后置&#xff08;3&#xff09;前置- -、后置- -&#xff08;4&#xff09;! 和 运算符重载&#xff08;5&#xff09;* 解引用重载 和 …

RocketMQ 消息消费 轮询机制 PullRequestHoldService

1. 概述 先来看看 RocketMQ 消费过程中的轮询机制是啥。首先需要补充一点消费相关的前置知识。 1.1 消息消费方式 RocketMQ 支持多种消费方式&#xff0c;包括 Push 模式和 Pull 模式 Pull 模式&#xff1a;用户自己进行消息的拉取和消费进度的更新Push 模式&#xff1a;Broker…

LLM应用的例子LLM use cases and tasks

您可能会认为LLMs和生成性AI主要关注聊天任务。毕竟&#xff0c;聊天机器人非常受到关注并且备受瞩目。下一个词的预测是许多不同功能背后的基本概念&#xff0c;从基本的聊天机器人开始。 但是&#xff0c;您可以使用这种概念上简单的技术执行文本生成中的其他各种任务。例如…