Java测试开发平台搭建(五)统一响应大对象、统一分页

发布于:2025-02-11 ⋅ 阅读:(18) ⋅ 点赞:(0)

 1. 统一响应大对象

resultCode:返回结果码 1 成功 0 失败
message:提示信息
data:响应结果数据
package com.hogwartstest.aitestmini.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.io.Serializable;

/**
 * 响应返回类
 * @author tlibn
 * @description
 * @create 2019-08-02
 */
@ApiModel(value="基础返回类",description="基础返回类")
public class ResultDto<T> implements Serializable {

    private static final long serialVersionUID = -7472879865481412372L;

    @ApiModelProperty(value="返回结果码 1 成功 0 失败", required = true, example="1",allowableValues = "1,0")
    private Integer resultCode;

    @ApiModelProperty(value="提示信息", example="成功",allowableValues = "成功,失败")
    private String message = "";

    @ApiModelProperty(value="响应结果数据")
    private T data = null;

    public Integer getResultCode() {
        return resultCode;
    }

    public static ResultDto newInstance(){
        return new ResultDto();
    }

    /**
     * 设置为成功状态
     */
    public void setAsSuccess() {
        this.resultCode = 1;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public static ResultDto success(String message){
        ResultDto resultDto = new ResultDto();
        resultDto.setAsSuccess();
        resultDto.setMessage(message);
        return resultDto;
    }
    public static <T> ResultDto<T> success(String message,T data){
        ResultDto<T> resultDto = new ResultDto<>();
        resultDto.setAsSuccess();
        resultDto.setMessage(message);
        resultDto.setData(data);
        return resultDto;
    }

    /**
     * 设置为失败状态
     */
    public void setAsFailure() {
        this.resultCode = 0;
    }

    public static <T> ResultDto<T> fail(String message){
        ResultDto<T> resultDto = new ResultDto<>();
        resultDto.setAsFailure();
        resultDto.setMessage(message);
        return resultDto;
    }

    public static <T> ResultDto<T> fail(String message,T data){
        ResultDto<T> resultDto = new ResultDto<>();
        resultDto.setAsFailure();
        resultDto.setMessage(message);
        resultDto.setData(data);
        return resultDto;
    }

    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }

}

2. 应用

Controller改造:

    @Operation(summary = "用户登录接口")
    @PostMapping("login") // 简化上面的操作
    public ResultDto<UserDto> login(@RequestBody UserDto userDto){
        String res = iTestUserService.login(userDto);

        if (userDto.getUsername().contains("error2")){
            throw new NullPointerException();
        }
        if (userDto.getUsername().contains("error")){
            ServiceException.throwEx("用户命中有error");
        }

        return ResultDto.success("success with userDto - " + res + "\niTest.env=" + envValue, userDto);
    }

全局异常捕获改造:

package com.itestmini.testplatformbackend.common;

import com.itestmini.testplatformbackend.dto.ResultDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

/**
 * @author moso
 * @Date 2024/12/23 23:35
 * 该类需要能捕获 1.业务异常
 * 2. 非业务异常
 * 3. 其他异常
 */


@Slf4j
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {

    //业务异常
    @ExceptionHandler({ServiceException.class})
    public ResultDto serviceExceptionHandler(ServiceException se){
        return resultFormat(se);
    }

    //非业务异常
    @ExceptionHandler({Exception.class})
    public ResultDto exception(Exception e){
        return resultFormat(e);
    }

    @ExceptionHandler({Throwable.class})
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public ResultDto exception(Throwable throwable){
        return resultFormat(throwable);
    }


    public ResultDto resultFormat(Throwable t){
        log.error(t.getMessage());
        String tips = "系统繁忙,请稍后再试";
        if (t instanceof ServiceException){
            return ResultDto.fail("业务异常 " + tips);
        }
        if(t instanceof Exception){
            return ResultDto.fail("非业务异常 " + tips);
        }
        return ResultDto.fail(tips);
    }

}

执行结果展示:

3. 分页

请求:

package com.itestmini.testplatformbackend.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.io.Serializable;

/**
 * @author moso
 * @Date 2024/12/25 22:50
 */

@Data
@Schema(name="列表查询的分页参数",description="请求参数类")
public class PageTableRequest<Dto extends BaseDto> implements Serializable {
    private static final long serialVersionUID = 7328071045193618467L;

    @Schema(name="页码",required=true, example = "1")
    private Integer pageNum = 1;

    @Schema(name="每页数据量",required=true, example = "10")
    private Integer pageSize = 10;

    @Schema(name="特定查询参数",required=true, example = "status=1")
    private Dto params;

}

响应:

package com.itestmini.testplatformbackend.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * @author moso
 * @Date 2024/12/25 22:53
 */

@Data
@Schema(name="列表查询的分页返回",description="返回结果类")
public class PageTableResponse<T> implements Serializable {

    private static final long serialVersionUID = 620421858510718076L;

    @Schema(name="共计返回数量",required=true, example = "10")
    private Integer recordsTotal;

    @Schema(name="返回结果对象",required=true)
    private List<T> data;
}

提交:

https://gitee.com/moso520/test-platform-backend.git

3818fef


网站公告

今日签到

点亮在社区的每一天
去签到