java开发自定义返回类、分页返回封装,自定义异常封装

626 阅读2分钟

自定义返回类

package com.wsl.common.result;

import lombok.Data;

/**
 * @ClassName Result
 * @Author wsl
 * @Date 2023/2/28 21:17
 * @Version 1.0
 * @Description
 */
@Data
public class Result<T> {

    private Integer code;//状态码
    private String message;//返回信息
    private T data;//数据

    //私有化
    private Result() {}

    //封装返回是数据
    public static <T> Result<T> build(T body, ResultCodeEnum resultCodeEnum) {
        Result<T> result = new Result<>();
        //封装数据
        if(body != null) {
            result.setData(body);
        }
        //状态码
        result.setCode(resultCodeEnum.getCode());
        //返回信息
        result.setMessage(resultCodeEnum.getMessage());
        return result;
    }

    //成功
    public static<T> Result<T> ok() {
        return build(null,ResultCodeEnum.SUCCESS);
    }

    public static<T> Result<T> ok(T data) {
        return build(data,ResultCodeEnum.SUCCESS);
    }

    //失败
    public static<T> Result<T> fail() {
        return build(null,ResultCodeEnum.FAIL);
    }

    public static<T> Result<T> fail(T data) {
        return build(data,ResultCodeEnum.FAIL);
    }

    public Result<T> message(String msg){
        this.setMessage(msg);
        return this;
    }

    public Result<T> code(Integer code){
        this.setCode(code);
        return this;
    }
}
package com.wsl.common.result;

import lombok.Getter;

/**
 * @ClassName ResultCodeEnum
 * @Author wsl
 * @Date 2023/2/28 21:18
 * @Version 1.0
 * @Description
 */
@Getter
public enum ResultCodeEnum {

    SUCCESS(200,"成功"),
    FAIL(201, "失败"),
    LOGIN_ERROR(208,"认证失败")
    ;

    private Integer code;
    private String message;

    private ResultCodeEnum(Integer code,String message) {
        this.code = code;
        this.message = message;
    }
}

分页返回封装

package com.wsl.base.model;



import io.swagger.annotations.ApiModelProperty;

import lombok.Data;

import lombok.ToString;



/**

 * @ClassName PageParams

 * @Author wsl

 * @Date 2023/2/22 16:11

 * @Version 1.0

 * @Description

 */

@Data

@ToString

public class PageParams {



    //当前页码默认值

    public static final long DEFAULT_PAGE_CURRENT = 1L;

    //每页记录数默认值

    public static final long DEFAULT_PAGE_SIZE = 10L;



    @ApiModelProperty("当前页码")

    //当前页码

    private Long pageNo = DEFAULT_PAGE_CURRENT;



    @ApiModelProperty("每页记录数")

    //每页记录数默认值

    private Long pageSize = DEFAULT_PAGE_SIZE;



    public PageParams(){



    }



    public PageParams(long pageNo,long pageSize){

        this.pageNo = pageNo;

        this.pageSize = pageSize;

    }

}
package com.wsl.base.model;



import lombok.Data;

import lombok.ToString;



import java.util.List;



/**

 * @ClassName PageResult

 * @Author wsl

 * @Date 2023/2/22 16:15

 * @Version 1.0

 * @Description

 */

@Data

@ToString

public class PageResult<T> {

    // 数据列表

    private List<T> items;



    //总记录数

    private long counts;



    //当前页码

    private long page;



    //每页记录数

    private long pageSize;



    public PageResult(List<T> items, long counts, long page, long pageSize) {

        this.items = items;

        this.counts = counts;

        this.page = page;

        this.pageSize = pageSize;

    }

}

自定义异常封装

package com.wsl.base.exception;



/**

 * @ClassName CommonError

 * @Author wsl

 * @Date 2023/2/22 23:14

 * @Version 1.0

 * @Description

 */

public enum  CommonError {

    UNKOWN_ERROR("执行过程异常,请重试。"),

    PARAMS_ERROR("非法参数"),

    OBJECT_NULL("对象为空"),

    QUERY_NULL("查询结果为空"),

    REQUEST_NULL("请求参数为空");



    private String errMessage;



    public String getErrMessage() {

        return errMessage;

    }



    private CommonError( String errMessage) {

        this.errMessage = errMessage;

    }

}
package com.wsl.base.exception;



import lombok.extern.slf4j.Slf4j;

import org.springframework.http.HttpStatus;

import org.springframework.validation.BindingResult;

import org.springframework.validation.FieldError;

import org.springframework.web.bind.MethodArgumentNotValidException;

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;



import java.util.List;



/**

 * @ClassName GlobalExceptionHandler

 * @Author wsl

 * @Date 2023/2/22 23:16

 * @Version 1.0

 * @Description 全局异常处理

 */

@Slf4j

@ControllerAdvice

public class GlobalExceptionHandler {



    @ResponseBody

    @ExceptionHandler(XueChengPlusException.class)

    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)

    public RestErrorResponse customException(XueChengPlusException e) {

        log.error("【系统异常】{}",e.getErrMessage(),e);

        return new RestErrorResponse(e.getErrMessage());



    }



    @ResponseBody

    @ExceptionHandler(Exception.class)

    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)

    public RestErrorResponse exception(Exception e) {



        log.error("【系统异常】{}",e.getMessage(),e);



        return new RestErrorResponse(CommonError.UNKOWN_ERROR.getErrMessage());



    }



    @ResponseBody

    @ExceptionHandler(MethodArgumentNotValidException.class)

    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)

    public RestErrorResponse doValidException(MethodArgumentNotValidException e) {

        BindingResult bindingResult = e.getBindingResult();

        //校验的错误信息

        List<FieldError> fieldErrors = bindingResult.getFieldErrors();

        //收集错误

        StringBuffer errors = new StringBuffer();

        fieldErrors.forEach(error->{

            errors.append(error.getDefaultMessage()).append(",");

        });



        return new RestErrorResponse(errors.toString());



    }

}
package com.wsl.base.exception;



import java.io.Serializable;



/**

 * @ClassName RestErrorResponse

 * @Author wsl

 * @Date 2023/2/22 23:16

 * @Version 1.0

 * @Description

 */

public class RestErrorResponse implements Serializable {

    private String errMessage;



    public RestErrorResponse(String errMessage){

        this.errMessage= errMessage;

    }



    public String getErrMessage() {

        return errMessage;

    }



    public void setErrMessage(String errMessage) {

        this.errMessage = errMessage;

    }

}
package com.wsl.base.exception;



/**

 * @ClassName XueChengPlusException

 * @Author wsl

 * @Date 2023/2/22 23:15

 * @Version 1.0

 * @Description

 */

public class XueChengPlusException extends RuntimeException  {

    private static final long serialVersionUID = 5565760508056698922L;



    private String errMessage;



    public XueChengPlusException() {

        super();

    }



    public XueChengPlusException(String errMessage) {

        super(errMessage);

        this.errMessage = errMessage;

    }



    public String getErrMessage() {

        return errMessage;

    }



    public static void cast(CommonError commonError){

        throw new XueChengPlusException(commonError.getErrMessage());

    }

    public static void cast(String errMessage){

        throw new XueChengPlusException(errMessage);

    }

}