个人封装的 Controller 的返回值封装类

2023-12-14 15:49:41

虽然结构都是 code、msg、data 三个参数。

但友好且可控的封装,能更好的约束后续研发人员的扩展。

package com.example.demo.utils;

import lombok.Data;

import java.io.Serializable;

/**
 * @author Rain
 * @date 2023/11/30
 */

@Data
public class Result<T> implements Serializable {

    private Integer code;
    private String msg;
    private T data;

    private Result(){
        
    }

    private static <T> Result<T> build(Label label) {
        return build(label, null);
    }

    private static <T> Result<T> build(Label label, T result) {

        return build(label, label.name(), result);
    }

    private static <T> Result<T> build(Label label, String message, T result) {
        Result<T> resultJson = new Result<>();
        resultJson.code = label.code;
        resultJson.msg = message;
        resultJson.data = result;
        return resultJson;
    }



    public static enum Label {

        /**
         * code 遵守如下约定:
         * 正数 代表 期望现象;
         * 负值 代表悲观现象;
         * 0 代表 基本符合预期。
         */
        Success(0),

        Failure(-1),

        FAILED_InvalidParameter(-2),

        FAILED_UnsupportedDataSourceType(-3),

        FAILED_UnauthorizedCodeOfDataLake(-4);

        private Integer code;

        Label(Integer code) {
            this.code = code;
        }

        public <T> Result<T> as(){
            return Result.build(this);
        }

        public <T> Result<T> as(T data){
            return Result.build(this,data);
        }
    }
}

在controller 内使用时,是这样的:

@ApiOperation("获取系列 字典")
@GetMapping(value = "/x1")
@ResponseBody
public Result<List<String>> x1() {

	return Result.Label.Success.as(this.service.x1());

}

或这样的:

	@PostMapping(value = "/x2")
	@ResponseBody
	public Result<Map<String,Object>> x2(
			@RequestParam(required = true)  String dataSourceType,
			@RequestParam(required = true)  String partNumber) {
		if(!StringUtils.hasText(dataSourceType)||!StringUtils.hasText(partNumber)){
			return Result.Label.FAILED_InvalidParameter.as();
		}

		SearchService service = this.getService(dataSourceType);
		if(service==null){
			return Result.Label.FAILED_UnsupportedDataSourceType.as();
		}

		return Result.Label.Success.as(service.x2(dataSourceType,partNumber);
	}

这里,既保持了风格的简洁性、使用的易用性。又限制了研发人员,让他们必须去 label 内定义清楚自己还生成什么作用的返回值(不能随便拿个创造 code 、msg,就直接让 controller 返回)

文章来源:https://blog.csdn.net/rainyspring4540/article/details/134994482
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。