个人封装的 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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!