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

news2025/1/29 14:08:06

前言:请求响应

目录

一  引子

二 请求

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.coloradmin.cn/o/894415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机竞赛 交通目标检测-行人车辆检测流量计数 - 计算机竞赛

文章目录 0 前言1\. 目标检测概况1.1 什么是目标检测&#xff1f;1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 毕业设计…

Python学习日志(二)

数据类型转换 num_strstr(11)# 整数转换为字符串 print(type(num_str), num_str) 输出结果为&#xff1a; <class str> 11 类型转换成功&#xff0c;并且原本内容没有发生变化。 float_strstr(13.14)#小数转字符串 print(type(float_str),float_str) 同理&#xff0c;…

Web菜鸟入门教程 - MyBatis通过数据库生成java代码

SpringBoot大大简化了Web开发流程。可以这么说&#xff0c;做Web后来开发大部分时间就是在做配置文件修改。Web开发中&#xff0c;终端的运算能力越来越强&#xff0c;大部分场景就是数据库的操作&#xff0c;只有少部分逻辑会放在Web端处理。而这些增删查改基本属于标准的格式…

【正点原子STM32连载】第十四章 独立看门狗实验 摘自【正点原子】APM32F407最小系统板使用指南

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html# 第十…

gor工具http流量复制、流量回放,生产运维生气

gor是一款流量复制回放工具&#xff0c;gor工具的官网&#xff1a;https://goreplay.org/ 1、对某个端口的http流量进行打印 ./gor --input-raw :8000 --output-stdout 2、对流量实时转发&#xff0c;把81端口流量转发到192.168.3.221:80端口 ./gor --input-raw :81--output-ht…

自适应混沌蜣螂优化算法及其MALTAB实现

本文改进主要参考&#xff1a; S. Li and J. Li, “Chaotic dung beetle optimization algorithm based on adaptive t-Distribution,” 2023 IEEE 3rd International Conference on Information Technology, Big Data and Artificial Intelligence (ICIBA), Chongqing, China…

滑块验证2

滑块示例 介绍 滑块图片地址接口获取,两张(滑块图和背景缺口图)验证通过校验为接口校验,需要一个uuid和位移拼接成校验地址uuid能通过接口获取,位移需计算得到缺口位移计算 需将两张图片区分保存,然后通过特定工具包计算出位移 所需包 opencv-python 部分代码 def _t…

陪诊小程序|服务到家就医陪伴更不可少

随着科技的不断发展和医疗服务的日益完善&#xff0c;陪诊小程序成为了当下为炙手可热的医疗软件之一。无论是患者还是医护人员&#xff0c;陪诊小程序都为他们提供了全新的就医体验和便捷的服务。下面让我们一同探索一下陪诊小程序的软件开发功能。 一、陪诊小程序功能&#x…

2018年3月全国计算机等级考试真题(语言二级C)

2018年3月全国计算机等级考试真题&#xff08;语言二级C&#xff09; 第1题 设有定义&#xff1a;char s[81]&#xff1b;int i0&#xff1b;以下不能将一行带有空格的字符串正确读入的语句或语句组是 A. while((s[i]getchar())!\n);s[i]\0; B. scanf("%s",s); C.…

数组累加器-reduce、reduceRight

数组累加器-reduce 一、基本语法1.reduce2.reduceRight 二、具体使用1.reduce2.reduceRight 三、使用场景1.数组求和2.数组求积3.计算数组中每个元素出现的次数 一、基本语法 1.reduce reduce() &#xff1a;对数组中的每个元素按序执行一个提供的 reducer 函数&#xff0c;每…

高效使用ChatGPT之ChatGPT客户端

ChatGPT客户端&#xff0c;支持Mac, Windows, and Linux 下载地址见文章结尾 软件截图 Windows: Mac&#xff1a; 说明 chatgpt桌面版&#xff0c;相比于网页版的chatgpt&#xff0c;最大的特色是支持历史聊天对话记录导出&#xff0c;且支持三种格式&#xff1a;PNG、PDF、…

i.MX6ULL开发板无法进入NFS挂载文件系统的解决办法

问题 使用NFS网络挂载文件系统后卡住无法进入系统。 解决办法 此处不详细讲述NFS安装流程 查看板卡挂载在/home/etc/rc.init下的自启动程序 进入到../../home/etc目录下&#xff0c;查看rc.init文件&#xff0c;首先从第一行排查&#xff0c;查看/home/etc/netcfg文件代码内容&…

AI版 PS AI beta 25.0的完整包

介绍&#xff1a; PS AI beta 25.0的完整包&#xff0c;还有一个神经网络滤镜&#xff0c;以及简体中文补丁。 离线完整包&#xff0c;直接安装就可以用&#xff0c;不需要国外注册登录&#xff0c;不需要国外网络做图&#xff0c;支持中文生成。安装文件目录&#xff1a; 3.安…

FinalShell SSH工具安装教程及编辑窗口修改背景颜色,自定义背景图片,修改字体,修改快捷键(详细图文教程)

FinalShell 在 Windows 上提供了一个方便、安全、功能完备的远程管理工具。它的中文支持和自定义功能让其适合国内 Linux 系统管理者使用。与 Xshell 等软件相比&#xff0c;FinalShell 更注重功能实用性。 目录 FinalShellFinalShell的安装教程FinalShell 的一些主要功能和特点…

破局!低代码直击智慧园区建设痛点!

从捷码官网获取的捷码产品体验账号&#xff0c;用浏览器打开下列地址即可&#xff08;推荐电脑端哈&#xff09;&#xff0c;需要自取&#xff1a; http://dev.gemcoder.com/front/development/index.html#/officialLogin?jmcmVnaXN0ZXI9dHJ1ZQ%3D%3D 随着大数据、物联网、云计…

open suse 15.5(任意版本) 使用阿里云的repo

一、shell suse 的包管理工具叫 zypper. zypper addrepo -f http://mirrors.aliyun.com/opensuse/distribution/leap/15.5/repo/oss/ openSUSE-15.5-Oss zypper addrepo -f http://mirrors.aliyun.com/opensuse/distribution/leap/15.5/repo/non-oss/ openSUSE-15.5-Non-Oss …

CS5523 MIPI/DSI转EDP信号转换芯片|pin√pin替代龙迅LT8911方案

ASL新推出CS5523是一款MIPI DSI输入、DP/e DP输出转换芯片。MIPI DSI最多支持4个通道&#xff0c;每个通道的最大运行速度为1.5Gps。对于DP 1.2输出&#xff0c;它由4个数据通道组成&#xff0c;支持1.62Gbps和2.7Gbps的链路速率。它支持2560的最高分辨率*144060Hz.它只能使用单…

pdf怎么合并在一起?这几个合并方法了解一下

pdf怎么合并在一起&#xff1f;在日常工作、学习和生活中&#xff0c;我们常常会遇到需要将多个PDF文件合并成一个文件的情况。比如&#xff0c;在学术论文写作中&#xff0c;我们可能需要将多篇论文合并成一个文件进行打印和提交。在工作中&#xff0c;我们可能需要将多个报告…

2023年上半年软件设计师下午真题及答案解析

试题一(15分) 随着农业领域科学种植的发展&#xff0c;需要对农业基地及农事进行信息化管理&#xff0c;为租户和农户等人员提供种植相关服务&#xff0c;现欲开发农事管理服务平台&#xff0c;其主要功能是&#xff1a; (1)人员管理&#xff1a;平台管理员管理租户&#xff…

msvcp120.dll丢失的解决方法?哪种解决方法比较常用?

msvcp140.dll是Microsoft Visual C Redistributable的一部分&#xff0c;它是Windows操作系统中的一个动态链接库文件。这个文件包含了许多C标准库函数的实现&#xff0c;对于一些依赖C标准库的应用程序来说&#xff0c;msvcp140.dll是非常重要的。msvcp140.dll的主要用途是提供…