• JSON和全局异常处理


    一、SpringMVC对JSON的支持

    1、JOSN的各种场景

    1.1返回List
    1.2返回List
    1.3返回T
    1.4返回Map
    1.5返回混合
    1.6返回JSON字符串

    2、pom依赖

     <dependency>
          <groupId>com.fasterxml.jackson.coregroupId>
          <artifactId>jackson-databindartifactId>
          <version>2.9.3version>
        dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.coregroupId>
          <artifactId>jackson-coreartifactId>
          <version>2.9.3version>
        dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.coregroupId>
          <artifactId>jackson-annotationsartifactId>
          <version>2.9.3version>
        dependency>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    3、Springmvc.xml配置

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
            <property name="messageConverters">
                <list>
                    <ref bean="mappingJackson2HttpMessageConverter"/>
                list>
            property>
        bean>
        <bean id="mappingJackson2HttpMessageConverter"
              class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            
            <property name="supportedMediaTypes">
                <list>
                    <value>text/html;charset=UTF-8value>
                    <value>text/json;charset=UTF-8value>
                    <value>application/json;charset=UTF-8value>
                list>
            property>
        bean>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    4、后台代码

    ①ClazzBiz

    package com.xnx.ssm.biz;
    
    import com.xnx.ssm.model.Clazz;
    import com.xnx.ssm.util.PageBean;
    
    import java.util.List;
    import java.util.Map;
    
    public interface ClazzBiz {
        int deleteByPrimaryKey(Integer cid);
    
        int insert(Clazz record);
    
        int insertSelective(Clazz record);
    
        Clazz selectByPrimaryKey(Integer cid);
    
        int updateByPrimaryKeySelective(Clazz record);
    
        int updateByPrimaryKey(Clazz record);
    
        List<Clazz> listPager(Clazz clazz, PageBean pageBean);
    
        List<Map> listMapPager(Clazz clazz, PageBean pageBean);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    ②ClazzBizImpl

    package com.xnx.ssm.biz.impl;
    
    import com.xnx.ssm.biz.ClazzBiz;
    import com.xnx.ssm.mapper.ClazzMapper;
    import com.xnx.ssm.model.Clazz;
    import com.xnx.ssm.util.PageBean;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    import java.util.Map;
    
    @Service
    public class ClazzBizImpl implements ClazzBiz {
        @Autowired
        private ClazzMapper clazzMapper;
        @Override
        public int deleteByPrimaryKey(Integer cid) {
            return clazzMapper.deleteByPrimaryKey(cid);
        }
    
        @Override
        public int insert(Clazz record) {
            return clazzMapper.insert(record);
        }
    
        @Override
        public int insertSelective(Clazz record) {
            return clazzMapper.insertSelective(record);
        }
    
        @Override
        public Clazz selectByPrimaryKey(Integer cid) {
            return clazzMapper.selectByPrimaryKey(cid);
        }
    
        @Override
        public int updateByPrimaryKeySelective(Clazz record) {
            return clazzMapper.updateByPrimaryKeySelective(record);
        }
    
        @Override
        public int updateByPrimaryKey(Clazz record) {
            return clazzMapper.updateByPrimaryKey(record);
        }
    
        @Override
        public List<Clazz> listPager(Clazz clazz, PageBean pageBean) {
            return clazzMapper.listPager(clazz);
        }
    
        @Override
        public List<Map> listMapPager(Clazz clazz, PageBean pageBean) {
            return clazzMapper.listMapPager(clazz);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    ③ClazzMapper.java

    package com.xnx.ssm.mapper;
    
    import com.xnx.ssm.model.Clazz;
    import org.springframework.stereotype.Repository;
    
    import java.util.List;
    import java.util.Map;
    
    @Repository
    public interface ClazzMapper {
        int deleteByPrimaryKey(Integer cid);
    
        int insert(Clazz record);
    
        int insertSelective(Clazz record);
    
        Clazz selectByPrimaryKey(Integer cid);
    
        List<Clazz> listPager(Clazz clazz);
    
        List<Map> listMapPager(Clazz clazz);
    
        int updateByPrimaryKeySelective(Clazz record);
    
        int updateByPrimaryKey(Clazz record);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    ④ClazzMapper.xml

    
    DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    <mapper namespace="com.xnx.ssm.mapper.ClazzMapper" >
      <resultMap id="BaseResultMap" type="com.xnx.ssm.model.Clazz" >
        <constructor >
          <idArg column="cid" jdbcType="INTEGER" javaType="java.lang.Integer" />
          <arg column="cname" jdbcType="VARCHAR" javaType="java.lang.String" />
          <arg column="cteacher" jdbcType="VARCHAR" javaType="java.lang.String" />
          <arg column="pic" jdbcType="VARCHAR" javaType="java.lang.String" />
        constructor>
      resultMap>
      <sql id="Base_Column_List" >
        cid, cname, cteacher, pic
      sql>
      <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
        select
        <include refid="Base_Column_List" />
        from t_struts_class
        where cid = #{cid,jdbcType=INTEGER}
      select>
    
      <select id="listPager" resultType="com.xnx.ssm.model.Clazz" parameterType="com.xnx.ssm.model.Clazz" >
        select
        <include refid="Base_Column_List" />
        from t_struts_class
        <where>
          <if test="cname != null and cname != ''">
             and cname like concat('%',#{cname},'%')
          if>
          <if test="cid != null and cid != ''">
            and cid = #{cid}
          if>
        where>
      select>
    
      <select id="listMapPager" resultType="java.util.Map" parameterType="com.xnx.ssm.model.Clazz" >
        select
        <include refid="Base_Column_List" />
        from t_struts_class
        <where>
          <if test="cname != null and cname != ''">
            and cname like concat('%',#{cname},'%')
          if>
          <if test="cid != null and cid != ''">
            and cid = #{cid}
          if>
        where>
      select>
    
      <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
        delete from t_struts_class
        where cid = #{cid,jdbcType=INTEGER}
      delete>
      <insert id="insert" parameterType="com.xnx.ssm.model.Clazz" >
        insert into t_struts_class (cid, cname, cteacher, 
          pic)
        values (#{cid,jdbcType=INTEGER}, #{cname,jdbcType=VARCHAR}, #{cteacher,jdbcType=VARCHAR}, 
          #{pic,jdbcType=VARCHAR})
      insert>
      <insert id="insertSelective" parameterType="com.xnx.ssm.model.Clazz" >
        insert into t_struts_class
        <trim prefix="(" suffix=")" suffixOverrides="," >
          <if test="cid != null" >
            cid,
          if>
          <if test="cname != null" >
            cname,
          if>
          <if test="cteacher != null" >
            cteacher,
          if>
          <if test="pic != null" >
            pic,
          if>
        trim>
        <trim prefix="values (" suffix=")" suffixOverrides="," >
          <if test="cid != null" >
            #{cid,jdbcType=INTEGER},
          if>
          <if test="cname != null" >
            #{cname,jdbcType=VARCHAR},
          if>
          <if test="cteacher != null" >
            #{cteacher,jdbcType=VARCHAR},
          if>
          <if test="pic != null" >
            #{pic,jdbcType=VARCHAR},
          if>
        trim>
      insert>
      <update id="updateByPrimaryKeySelective" parameterType="com.xnx.ssm.model.Clazz" >
        update t_struts_class
        <set >
          <if test="cname != null" >
            cname = #{cname,jdbcType=VARCHAR},
          if>
          <if test="cteacher != null" >
            cteacher = #{cteacher,jdbcType=VARCHAR},
          if>
          <if test="pic != null" >
            pic = #{pic,jdbcType=VARCHAR},
          if>
        set>
        where cid = #{cid,jdbcType=INTEGER}
      update>
      <update id="updateByPrimaryKey" parameterType="com.xnx.ssm.model.Clazz" >
        update t_struts_class
        set cname = #{cname,jdbcType=VARCHAR},
          cteacher = #{cteacher,jdbcType=VARCHAR},
          pic = #{pic,jdbcType=VARCHAR}
        where cid = #{cid,jdbcType=INTEGER}
      update>
    mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113

    ⑤JsonController

    package com.xnx.ssm.web;
    
    import com.xnx.ssm.biz.ClazzBiz;
    import com.xnx.ssm.model.Clazz;
    import com.xnx.ssm.util.PageBean;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import javax.servlet.http.HttpServletRequest;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * @author xnx
     * @create 2022-08-22 16:27
     */
    @Controller
    @RequestMapping("/clz/json")
    public class JsonController {
        @Autowired
        private ClazzBiz clazzBiz;
    
        @ResponseBody
        @RequestMapping("/clzEdit")
        public String clzEdit(){
            System.out.println("JsonController.list");
            return "clzEdit";
        }
    
    //    list
        @ResponseBody
        @RequestMapping("/list")
        public List<Clazz> list(HttpServletRequest request,Clazz clazz){
    //        System.out.println("JsonController.list");
            PageBean pageBean=new PageBean();
            pageBean.setRequest(request);
    //        [{},{}]
            return this.clazzBiz.listPager(clazz,pageBean);
        }
    
    //    list
        @ResponseBody
        @RequestMapping("/listMap")
        public List<Map> listMap(HttpServletRequest request, Clazz clazz){
    //        System.out.println("JsonController.list");
            PageBean pageBean=new PageBean();
            pageBean.setRequest(request);
    //        [{},{}]
            return
                    this.clazzBiz.listMapPager(clazz,pageBean);
        }
    
    //    Map
        @ResponseBody
        @RequestMapping("/map")
        public Map map(HttpServletRequest request, Clazz clazz){
        //        System.out.println("JsonController.list");
            PageBean pageBean=new PageBean();
            pageBean.setRequest(request);
        //        {}
            return this.clazzBiz.listMapPager(clazz,pageBean).get(0);
        }
    
    //    T
        @ResponseBody
        @RequestMapping("/load")
        public Clazz load(HttpServletRequest request, Clazz clazz){
    //        http://localhost:8080/clz/json/load?cid=2
            //        System.out.println("JsonController.list");
            PageBean pageBean=new PageBean();
            pageBean.setRequest(request);
            //        {}
            return this.clazzBiz.listPager(clazz,pageBean).get(0);
        }
    
    //    {
    //         msg:"",
    //        code:200,
    //        data:[],
    //         pageBean:{}
    //    }
        @ResponseBody
        @RequestMapping("/hunhe")
        public Map hunhe(HttpServletRequest request, Clazz clazz){
        //        http://localhost:8080/clz/json/load?cid=2
            PageBean pageBean=new PageBean();
            pageBean.setRequest(request);
            List<Clazz> lst = this.clazzBiz.listPager(clazz, pageBean);
            Map map = new HashMap();
            map.put("data",lst);
            map.put("pagebean",pageBean);
            return map;
    //        return this.clazzBiz.listPager(clazz,pageBean).get(0);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99

    5、前台测试

    ①index.jsp

    <%--
      Created by IntelliJ IDEA.
      User: Administrator
      Date: 2022/8/22
      Time: 16:50
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>测试json数据返回</title>
    </head>
    <body>
        <a href="${pageContext.request.contextPath}/clz/json/list">返回List&lt;T&gt;对象</a><hr>
        <a href="${pageContext.request.contextPath}/clz/json/listMap">返回List&lt;Map&gt;对象</a><hr>
        <a href="${pageContext.request.contextPath}/clz/json/load?cid=1">返回T对象</a><hr>
        <a href="${pageContext.request.contextPath}/clz/json/map?cid=1">返回Map对象</a><hr>
        <a href="${pageContext.request.contextPath}/clz/json/hunhe">返回混合对象</a><hr>
    </body>
    </html>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    运行效果:

    在这里插入图片描述
    List
    在这里插入图片描述
    List
    在这里插入图片描述
    返回T对象
    在这里插入图片描述
    返回map对象
    在这里插入图片描述
    返回混合对象
    在这里插入图片描述

    二、SpringMVC 的全局异常处理

    1、SpringMVC自带的简单异常处理器

    SpringMVC的配置文件

    
        <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
            
            <property name="defaultErrorView" value="error"/>
            
            <property name="exceptionAttribute" value="ex"/>
            
            <property name="exceptionMappings">
                <props>
                    <prop key="java.lang.RuntimeException">errorprop>
                props>
                
            property>
        bean>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    Error.jsp

    <%--
      Created by IntelliJ IDEA.
      User: Administrator
      Date: 2022/8/22
      Time: 17:17
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    ${ex}
    </body>
    </html>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    返回List对象
    在这里插入图片描述
    返回List对象
    在这里插入图片描述

    2、通过HandlerExceptionResovler接口实现全局异常

    先将上面SpringMVC中关于异常处理的配置取消掉

    ①GlobalException

    package com.xnx.ssm.exception;
    
    /**
     * @author xnx
     * @create 2022-08-22 17:20
     */
    public class GlobalException extends RuntimeException{
    
        public GlobalException() {
            super();
        }
    
        public GlobalException(String message) {
            super(message);
        }
    
        public GlobalException(String message, Throwable cause) {
            super(message, cause);
        }
    
        public GlobalException(Throwable cause) {
            super(cause);
        }
    
        protected GlobalException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
            super(message, cause, enableSuppression, writableStackTrace);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    ②GlobalExceptionHandler

    package com.xnx.ssm.exception;
    
    import org.springframework.stereotype.Component;
    import org.springframework.web.servlet.HandlerExceptionResolver;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * @author xnx
     * @create 2022-08-22 18:11
     */
    @Component
    public class GlobalExceptionHandler implements HandlerExceptionResolver {
    
        @Override
        public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
            ModelAndView mv=new ModelAndView();
            mv.setViewName("error");
            if(e instanceof GlobalException){
                GlobalException globalException = (GlobalException) e;
                mv.addObject("ex",globalException);
                mv.addObject("msg","全局异常");
            }else if(e instanceof RuntimeException){
                RuntimeException runtimeException = (RuntimeException) e;
                mv.addObject("ex",runtimeException.getMessage());
                mv.addObject("msg","运行时异常");
            }
            return mv;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    controller层

    //    T
        @ResponseBody
        @RequestMapping("/load")
        public Clazz load(HttpServletRequest request, Clazz clazz){
    //        http://localhost:8080/clz/json/load?cid=2
            //        System.out.println("JsonController.list");
    //        PageBean pageBean=new PageBean();
    //        pageBean.setRequest(request);
            //        {}
            if(clazz.getCid()!=null){
                List<Clazz> lst=this.clazzBiz.listPager(clazz,null);
                if(true)
                    throw new GlobalException("错误出现在JsonController.load");
                return lst.get(0);
            }
            return null;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    3、使用@ControllerAdvice+@ExceptionHandler实现全局异常

    GlobalExceptionResolver:

    package com.xnx.ssm.exception;
    
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.servlet.ModelAndView;
    
    /**
     * @author xnx
     * @create 2022-08-22 18:40
     */
    @ControllerAdvice
    public class GlobalExceptionResolver {
        @ExceptionHandler
        public ModelAndView handler(Exception e){
            ModelAndView mv = new ModelAndView();
            mv.setViewName("error");
            if(e instanceof GlobalException){
                GlobalException globalException = (GlobalException) e;
                mv.addObject("ex",globalException.getMessage());
                mv.addObject("msg","全局异常");
            }else if(e instanceof RuntimeException){
                RuntimeException runtimeException = (RuntimeException) e;
                mv.addObject("ex",runtimeException.getMessage());
                mv.addObject("msg","运行时异常..");
            }
            return mv;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    4、全局异常处理JSON返回

    GlobalExceptionJsonResolver:

    package com.xnx.ssm.exception;
    
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.RestControllerAdvice;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @author xnx
     * @create 2022-08-22 18:50
     */
    @RestControllerAdvice
    public class GlobalExceptionJsonResolver {
        @ExceptionHandler
        public Map handler(Exception e){
            Map map = new HashMap();
            if(e instanceof GlobalException){
                GlobalException globalException = (GlobalException) e;
                map.put("ex",globalException.getMessage());
                map.put("msg","全局异常");
            }else if(e instanceof RuntimeException){
                RuntimeException runtimeException = (RuntimeException) e;
                map.put("ex",runtimeException.getMessage());
                map.put("msg","运行时异常");
            }
            return map;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    点击返回T对象:
    在这里插入图片描述

  • 相关阅读:
    华为通过FTP 进行文件操作示例
    N-128基于springboot,vue酒店管理系统
    基于STM32单片机的天然气与温湿度检测报警系统设计
    创建python虚拟环境
    2386. 找出数组的第 K 大和 (每日一难phase2-day2)
    react 路由拦截通过tocken进行简单拦截
    CPDA|如何拥有数据分析思维?
    QT_day3
    高并发场景防止超卖的实现
    【uni-app】uni项目打包微信小程序中使用 ECharts (mpvue-echarts)
  • 原文地址:https://blog.csdn.net/weixin_67677668/article/details/126469526