通用jsonResult封装返回结果(boolean方法也可以通过这个返回的)

admin2025-10-02 12:21:26世界杯比赛赛

文章目录

JsonResult类的代码

成功成功的情况下如何封装

失败失败的情况下的封装(手动封装)失败情况下的code,message半自动封装失败情况下抛异常让全局异常处理器处理如何判定成功和失败(success、false)判定成功和失败2对于导入excel这种如何返回boolean方法用jsonResult也是可以的

JsonResult类的代码

/**

* 通用JsonResult 构造器私有化,静态方法ok表示成功, fail表示失败。

*/

@Data

public class JsonResult {

private static final long serialVersionUID =-123847128341023033L;

@JSONField

private boolean success = true;

@JSONField

private String message = null;

@JSONField

private String errorCode = "0";

@JSONField

private String errorMsg = "操作成功";

@JSONField

private Integer total = 0;

@JSONField

private List data = new ArrayList();

private JsonResult() {

}

/**

* 虽然很多人都写为isSuccess(),但强烈不建议,因为相当于getSuccess()

* 可以用idea的自动生成下,如果有isSuccess(),就不会生成getSuccess()

*/

public boolean successFlag() {

return success;

}

public JsonResult(T data) {

if (data != null) {

this.data.add(data);

}

}

public JsonResult(List data) {

if (data != null && data.size() > 0) {

this.data = data;

}

}

public static JsonResult ok(){

return new JsonResult();

}

public static JsonResult ok(List data){

JsonResult jsonResult = new JsonResult();

if (data != null && data.size() > 0) {

jsonResult.data = data;

}

return jsonResult;

}

public static JsonResult ok(T data){

JsonResult jsonResult = new JsonResult();

if (data != null) {

jsonResult.data.add(data);

}

return jsonResult;

}

public static JsonResult ok(String string){

JsonResult jsonResult = new JsonResult();

jsonResult.setErrorMsg(string);

return jsonResult;

}

public static JsonResult fail(String errorCode,String errorMsg){

JsonResult jsonResult = new JsonResult();

jsonResult.setSuccess(false);

jsonResult.setErrorCode(errorCode);

jsonResult.setErrorMsg(errorMsg);

return jsonResult;

}

/**

* 当有异常时,直接throw一个实现ErrorCode的异常类

* 通过global异常处理器,就可以把jsonResult封装起来,这样代码简洁优美

* 如果没有BaseException可以注释掉这个方法

*/

// public static JsonResult fail(BaseException exception){

// JsonResult jsonResult = new JsonResult();

// if (exception != null) {

// jsonResult.success = false;

// jsonResult.errorCode = exception.getErrorCode();

// jsonResult.errorMsg = exception.getErrorMsg();

// }

// return jsonResult;

// }

public static void main(String[] args) {

JsonResult jsonResult = JsonResult.ok(new Demo());

System.out.println(JSON.toJSONString(jsonResult));

}

}

成功

成功情况下,放入要返回的数据即可: 1、data 2、total 成功情况下,message一般用不到,用默认的就可以了。

成功的情况下如何封装

用如下封装方式:

List list =new ArrayList<>();

JsonResult jsonResult = new JsonResult<>(list); //直接把data放到里面了

jsonResult.setTotal(list.size());

失败

失败情况下一般设置3个字段即可(data是不需要的): success: false code: -1 或对应的错误码 message: 错误提示

失败的情况下的封装(手动封装)

JsonResult jsonResult = new JsonResult<>();

//异常时 success字段,code字段一定要记得重置。 因为success默认是true,code默认为0

jsonResult.setSuccess(false);

jsonResult.setErrorCode("-1");

jsonResult.setErrorMsg("系统异常"); // 这个字段一般也需要

//异常情况下data和total一般不需要

失败情况下的code,message半自动封装

上面那种完全可以实现功能,但是代码看起来有点啰嗦,可以加个构造器,传入errorCode,errorMsg:

JsonResult jsonResult = new JsonResult("-1","未知错误");

失败情况下抛异常让全局异常处理器处理

思路: 1、代码错误时抛出一个包含code和message的exception类。 2、全局拦截器拦截异常并封装返回jsonResult。 BaseException 大体如下:

@Data

public class BaseException extends RuntimeException {

private static final long serialVersionUID = 6599301895983119239L;

String errorCode;

String errorMsg;

public BaseException(String errorCode, String errorMsg) {

super(errorMsg);

this.errorCode = errorCode;

this.errorMsg = errorMsg;

}

}

代码中这么写:

Object object=null;

if(object==null){

throw new BaseException("-1","系统异常");

}

异常拦截器获取到异常放到jsonResult中返回,代码如下:

BaseException baseException=new BaseException("-1","系统异常"); // 这个模拟拦截器捕获到的异常

JsonResult jsonResult = new JsonResult(baseException); // 直接放到json里面即可,(构造的时候会设置success,code,message)

return jsonResult;

这其实也能解决很多人反映的service里面写很多if,return的问题。

如何判定成功和失败(success、false)

如果发生了异常,那么一般判定为失败。

有的时候,查不到,该成功还是失败? 这个要看情况。

例如超期接口,没有设置超期就查不到。这个是正常的。 例如转账接口,查不到任何一方,肯定要报异常,因为业务就无法完成。

判定成功和失败2

判断依据主要为,是否拿到了预期的结果。

例如: 接口为用户列表查询 queryUserList(); 即使一条也没有。也应该设置为true。

例如: 接口为根据用户名获取用户类型 queryUserType(); 如果queryUserList() 没有查到结果。 这时要设置为false。因为没数据,用户类型根本不知道是什么?

对于导入excel这种如何返回

这种情况比较特殊,可以将出错的数据放到data中,因为成功的数据并不关心。 如果非要2个都存,可以专门设计个jsonResult,再加个errorData存放数据。

至于错误数据如何存放,如果是本地的可以自定义,如果是远程的,直接list.add 返回的报文即可。

boolean方法用jsonResult也是可以的

很多时候用boolean方法,方便是方便,但是有个确定,如果要带出原因就无能为力了。 其实boolean方法用jsonResult也可以,这样就可以带出message了。 但是有几个点: 1、只用code和message,所以不涉及data.get(0)之类繁琐的代码。 # boolean方法不用jsonResult很大程度是因为getData()判空太麻烦,其实完全用不到data。 2、初始化的result应该是false,即:new JsonResult.error(“-1”,“失败”); 3、调用的方法写起来其实也不复杂。

boolean写法:

if(flag){}

jsonResult写法:

if(result.isSuccess()){}

友情链接