文章目录JsonResult类的代码JsonResult类的代码-简版(不要errorCode)(推荐)io流中的jsonResult工具类成功成功的情况下如何封装失败失败的情况下的封装(手动封装)失败情况下的codemessage半自动封装失败情况下抛异常让全局异常处理器处理如何判定成功和失败(success、false)判定成功和失败2对于导入excel这种如何返回boolean方法用jsonResult也是可以的JsonResult类的代码/** * 通用JsonResult 构造器私有化静态方法ok表示成功 fail表示失败。 */DatapublicclassJsonResultT{privatestaticfinallongserialVersionUID-123847128341023033L;JSONFieldprivatebooleansuccesstrue;JSONFieldprivateStringmessagenull;JSONFieldprivateStringerrorCode0;JSONFieldprivateStringerrorMsg操作成功;JSONFieldprivateIntegertotal0;JSONFieldprivateListTdatanewArrayList();privateJsonResult(){}/** * 虽然很多人都写为isSuccess(),但强烈不建议因为相当于getSuccess() * 可以用idea的自动生成下如果有isSuccess()就不会生成getSuccess() */publicbooleansuccessFlag(){returnsuccess;}publicJsonResult(Tdata){if(data!null){this.data.add(data);}}publicJsonResult(ListTdata){if(data!nulldata.size()0){this.datadata;}}publicstaticJsonResultok(){returnnewJsonResult();}publicstaticTJsonResultok(ListTdata){JsonResultjsonResultnewJsonResult();if(data!nulldata.size()0){jsonResult.datadata;}returnjsonResult;}publicstaticTJsonResultok(Tdata){JsonResultjsonResultnewJsonResult();if(data!null){jsonResult.data.add(data);}returnjsonResult;}publicstaticTJsonResultok(Stringstring){JsonResultjsonResultnewJsonResult();jsonResult.setErrorMsg(string);returnjsonResult;}publicstaticJsonResultfail(StringerrorCode,StringerrorMsg){JsonResultjsonResultnewJsonResult();jsonResult.setSuccess(false);jsonResult.setErrorCode(errorCode);jsonResult.setErrorMsg(errorMsg);returnjsonResult;}/** * 当有异常时直接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;// }publicstaticvoidmain(String[]args){JsonResultjsonResultJsonResult.ok(newDemo());System.out.println(JSON.toJSONString(jsonResult));}}JsonResult类的代码-简版(不要errorCode)(推荐)/** * 通用JsonResult 构造器私有化静态方法ok表示成功 fail表示失败。 */DatapublicclassJsonResultT{privatestaticfinallongserialVersionUID-123847128341023033L;JSONFieldprivatebooleansuccesstrue;JSONFieldprivateStringmessage操作成功;JSONFieldprivateStringcode0;JSONFieldprivateIntegertotal0;JSONFieldprivateListTdatanewArrayList();privateJsonResult(){}/** * 虽然很多人都写为isSuccess(),但强烈不建议因为相当于getSuccess() * 可以用idea的自动生成下如果有isSuccess()就不会生成getSuccess() */publicbooleansuccessFlag(){returnsuccess;}publicJsonResult(Tdata){if(data!null){this.data.add(data);}}publicJsonResult(ListTdata){if(data!nulldata.size()0){this.datadata;}}publicstaticJsonResultok(){returnnewJsonResult();}publicstaticTJsonResultok(ListTdata){JsonResultjsonResultnewJsonResult();if(data!nulldata.size()0){jsonResult.datadata;}returnjsonResult;}publicstaticTJsonResultok(Tdata){JsonResultjsonResultnewJsonResult();if(data!null){jsonResult.data.add(data);}returnjsonResult;}publicstaticJsonResultfail(StringerrorCode,StringerrorMsg){JsonResultjsonResultnewJsonResult();jsonResult.setSuccess(false);jsonResult.setCode(errorCode);jsonResult.setMessage(errorMsg);returnjsonResult;}/** * 当有异常时直接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;// }publicstaticvoidmain(String[]args){}}io流中的jsonResult工具类特别注意response.isCommitted()这行很关键。Slf4jpublicclassIOResultUtils{/** * param response 响应对象 * param httpStatus 标准的 HTTP 状态码如 404, 500 * param code 你的自定义业务错误码如 -1, 30001 * param message 错误提示信息 */publicstaticvoiderror(HttpServletResponseresponse,inthttpStatus,Stringcode,Stringmessage){try{// 1. 检查响应是否已经提交如果已经开始下载文件了就不能再写 JSON 了if(response.isCommitted()){log.warn(响应已提交无法写入错误 JSON: {},message);return;}// 2. 设置标准的 HTTP 状态码绝对不要传 -1 给 setStatusresponse.setStatus(httpStatus);response.setContentType(application/json;charsetUTF-8);// 3. 写入自定义的 JSON 响应体JsonResultfailResultJsonResult.fail(code,message);response.getWriter().write(JSON.toJSONString(failResult));response.getWriter().flush();// 强制刷出缓冲区}catch(IOExceptione){log.error(io流result工具类操作异常,error,e);}}}成功成功情况下放入要返回的数据即可1、data2、total成功情况下message一般用不到用默认的就可以了。成功的情况下如何封装用如下封装方式ListStringlistnewArrayList();JsonResultStringjsonResultnewJsonResult(list);//直接把data放到里面了jsonResult.setTotal(list.size());失败失败情况下一般设置3个字段即可(data是不需要的)success: falsecode: -1 或对应的错误码message: 错误提示失败的情况下的封装(手动封装)JsonResultStringjsonResultnewJsonResult();//异常时 success字段code字段一定要记得重置。 因为success默认是true,code默认为0jsonResult.setSuccess(false);jsonResult.setErrorCode(-1);jsonResult.setErrorMsg(系统异常);// 这个字段一般也需要//异常情况下data和total一般不需要失败情况下的codemessage半自动封装上面那种完全可以实现功能但是代码看起来有点啰嗦可以加个构造器传入errorCodeerrorMsgJsonResultStringjsonResultnewJsonResult(-1,未知错误);失败情况下抛异常让全局异常处理器处理思路1、代码错误时抛出一个包含code和message的exception类。2、全局拦截器拦截异常并封装返回jsonResult。BaseException 大体如下DatapublicclassBaseExceptionextendsRuntimeException{privatestaticfinallongserialVersionUID6599301895983119239L;StringerrorCode;StringerrorMsg;publicBaseException(StringerrorCode,StringerrorMsg){super(errorMsg);this.errorCodeerrorCode;this.errorMsgerrorMsg;}}代码中这么写:Objectobjectnull;if(objectnull){thrownewBaseException(-1,系统异常);}异常拦截器获取到异常放到jsonResult中返回代码如下:BaseExceptionbaseExceptionnewBaseException(-1,系统异常);// 这个模拟拦截器捕获到的异常JsonResultjsonResultnewJsonResult(baseException);// 直接放到json里面即可,(构造的时候会设置success,code,message)returnjsonResult;这其实也能解决很多人反映的service里面写很多ifreturn的问题。如何判定成功和失败(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()){}