Java返回统一结果集和异常处理

前言

随着前后端分离的潮流,现在需要考虑的是如果和前端有个明确的规定,比如:我添加了一条数据,后端设计的时候是void类型的,没有返回值,那前端怎么判断这个添加的操作是否成功呢?这个时候如果有一个约定,不管是不是void类型,我们把结果用结果集包起来,通过code的形式告知前端,这样前端不就可以判断是否操作成功了吗?

返回统一结果集的例子

1.首先创建一个Maven工程

        <!--   导入spring boot支持  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>1.5.6.RELEASE</version>
        </dependency>

2.写包裹结果的类,这个类主要是存放一个code:用来给前端判断操作的状态。message:执行的结果。以及data:返回给前端的数据,可以是实体类,也可以是字符串。

引入依赖

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>7</source>
                    <target>7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

创建Result类

package com.zhao.spring.util;

public class Result<T> {
    
    
    /**状态码*/
    private int code;
    /**消息*/
    private String message;
    /**返回的数据*/
    private T data;

    //省略getter和setter

    //省略有参构造方法和无参构造方法

    //省略toString方法
    
    //定义一个枚举
    enum ResultCode{
    
    
        SUCCESS(200,"成功!"),
        BAD(400, "失败!"),
        EMPTY(404,"资源不存在!");

        private int code;
        private String message;

        ResultCode(int code, String message) {
    
    
            this.code = code;
            this.message = message;
        }

        public int getCode() {
    
    
            return code;
        }

        public String getMessage() {
    
    
            return message;
        }
    }
    /**
     * 成功
     * @param data
     * @param <T>
     * @return
     */
    public static <T> Result<T> success(T data){
    
    
        Result<T> result = new Result<>();
        result.code=ResultCode.SUCCESS.getCode();
        result.message=ResultCode.SUCCESS.getMessage();
        result.data=data;
        return result;
    }
}

3.创建一个测试类

@RestController
public class TestController {
    
    

    @GetMapping("/findAll")
    public Result findAll(@RequestParam("id") Integer id){
    
    
        School school = new School();
        school.setId(id);
        school.setSchoolName("上海理工");
        return Result.success(school);
    }
}

访问结果如下

在这里插入图片描述

异常处理

异常处理是非常的重要的,比如前端传递的参数后端没有接收到,如果不进行异常处理的话就会报错,所以这个时候就需要进行异常处理了

1.创建一个全局的异常处理类ErrorCode

public enum ErrorCode {
    
    

    null_id(1051, "nullId", "参数丢失");

    private int status;
    private String code;
    private String reason;

    ErrorCode(int status, String code, String reason) {
    
    
        this.status = status;
        this.code = code;
        this.reason = reason;
    }
   //省略getter和setter方法
}

在上一个结果集类Result类中加上一个异常的返回方法

    /**
     * 失败
     * @param <T>
     * @param errorCode
     * @return
     */
    public static <T> Result<T> bad(ErrorCode errorCode){
    
    
        Result<T> result=new Result<>();
        result.code=ResultCode.BAD.getCode();
        result.message=errorCode.getReason();
        result.data=null;
        return result;
    }

3.然后我们再次修改测试的方法

@RestController
public class TestController {
    
    

    @GetMapping("/findAll")
    public Result findAll(@RequestParam("id") Integer id,
                          //required = false:允许传递的参数为空
                          @RequestParam(value = "schoolName",required = false) String schoolName){
    
    
        if (schoolName == null){
    
    
            //如果schoolName为null就返回异常:说明参数丢失
            return Result.bad(ErrorCode.null_id);
        }
        School school = new School();
        school.setId(id);
        school.setSchoolName(schoolName);
        return Result.success(school);
    }
}

返回结果如下

在这里插入图片描述

到此,结束。

猜你喜欢

转载自blog.csdn.net/javaasd/article/details/109663331
今日推荐