SpringBoot返回统一的JSON标准格式实现步骤

下面是“SpringBoot返回统一的JSON标准格式实现步骤”的完整攻略:

下面是“SpringBoot返回统一的JSON标准格式实现步骤”的完整攻略:

1. 为什么需要统一的JSON标准格式

在Web开发中,经常需要通过API接口返回JSON格式的数据,在返回JSON数据时大家的实现方式可能会有所不同,这就导致在调用不同接口时,返回的JSON格式可能会存在不同的字段、不同的格式等情况,这也会增加前端开发人员的工作难度。因此,为了简化前端开发人员的工作,统一JSON格式就显得非常必要。

一般情况下,我们需要定义一个统一的JSON格式,比如:

{
  "code":0,
  "message":"success",
  "data":{}   
}

其中,code表示返回码,0表示成功,非0表示失败;message表示返回信息,一般是success或failure;data表示返回的数据,可以是任意类型的数据,比如json object、json array、string等等。

2. 实现步骤

下面是实现统一的JSON标准格式的几个步骤:

1. 定义返回统一的JSON格式的类

在项目中创建一个返回统一的JSON格式的类,可以命名为ResultVO、CommonResult等,该类需要定义以下字段:

  • code:返回码,可以为int类型或String类型。
  • message:返回信息,一般为String类型。
  • data:返回的数据,可以为任意类型。

示例代码如下:

public class ResultVO<T> {
    private int code;
    private String message;
    private T data;
    // getter 和 setter
}

2. 自定义统一的异常处理

在项目中创建统一的异常处理类,可以命名为GlobalExceptionHandler,在该类中定义相应的异常处理方法。处理URLNotFoundException、MethodArgumentNotValidException等常见异常,将异常信息封装到定义的统一JSON格式的类中返回给前端。

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public ResultVO handle(Exception e) {
        if (e instanceof URLNotFoundException) {
            // URL不存在异常处理
            return ResultVOUtil.error(404, "URL Not Found");
        } else if (e instanceof MethodArgumentNotValidException) {
            // 参数校验异常处理
            StringBuilder err = new StringBuilder();
            BindingResult bindingResult = ((MethodArgumentNotValidException) e).getBindingResult();
            for (ObjectError objectError : bindingResult.getAllErrors()) {
                err.append(objectError.getDefaultMessage()).append(";");
            }
            return ResultVOUtil.error(400, err.substring(0, err.length() - 1));
        }
        // 其他异常处理
        return ResultVOUtil.error(500, "Internal Server Error");
    }
}

3. 相应的Controller里统一返回ResultVO

在Controller中在需要返回JSON数据的方法中使用统一的JSON格式类返回数据即可。如果是成功返回,则返回code=0,message=“success”,data中存放需要返回的数据;如果是失败返回,则返回code非0,message中存放错误信息。

@RestController
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/{id}")
    public ResultVO getDemo(@PathVariable("id") Integer id) {
        Demo demo = demoMapper.selectById(id);
        if (demo == null) {
            throw new URLNotFoundException();
        }
        return ResultVOUtil.success(demo);
    }
}

这样,在所有涉及到返回JSON数据的方法中,都可以返回统一的JSON格式,使前端开发人员更加方便地接收和处理数据。

3. 示例说明

下面是两个关于统一的JSON格式类的示例说明。

示例1:返回统一的JSON格式类

public class ResultVO {
    // 错误码
    private Integer code;
    // 提示信息
    private String msg;
    //请求的具体内容
    private Object data;

    // getter和setter方法
}

示例2:自定义相应的异常处理

在GlobalExceptionHandler类中定义多个异常处理方法,以下是一个参数验证异常处理的示例:

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    @ResponseBody
    public ResultVO handleBindException(MethodArgumentNotValidException ex) {
        FieldError fieldError = ex.getBindingResult().getFieldError();
        return ResultVOUtil.error(501, fieldError.getDefaultMessage());
    }
}

在该示例中,当出现方法参数验证异常时,会调用handleBindException方法进行处理,返回code为501,msg为具体的错误提示信息。

本文标题为:SpringBoot返回统一的JSON标准格式实现步骤

基础教程推荐