抛出异常,想把异常信息返回给前端,便于查看。 这时候,要对异常进行捕获,然后赋值给返回值。

简易抛出异常代码

    @Transactionalpublic Object uploadSqlFile(String sqlStr){JSONObject result = new JSONObject();try {splitExcuteSql(sqlStr);result.put("msg", "执行完成");}catch (Exception ex){if (ex instanceof ExcuteExcption) {ExcuteExcption excuteExcption = (ExcuteExcption) ex;result.put("msg",excuteExcption.getMessage());}else{result.put("msg",ex.getMessage());}}return result;}@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)public void splitExcuteSql(String sqlStr) {JSONObject result = new JSONObject();String[] split = sqlStr.split(";");List<String> sqlList = new ArrayList<>(Arrays.asList(split));int lastIndex = sqlList.size() - 1;String last = sqlList.get(lastIndex);if (last.contains("下拉框,树形控件的数据源")) {sqlList.remove(lastIndex);}try {for (String sql : ListUtils.emptyIfNull(sqlList)) {if (StringUtils.isNotBlank(sql)) {
//                    executeSqls(sql.trim()); // 执行sql}}} catch (Exception e) {e.printStackTrace();String message = e.getMessage();if (message.contains("PRIMARY")) {message = message + " 主键重复,请增大序列当前值,再进行插入!";}throw new ExcuteExcption(message);}}

自定义异常ExcuteExcption

public class ExcuteExcption extends RuntimeException {public static final Integer SUCCESS_CODE = 200;public static final Integer ERROR_CODE = 500;/*** 错误码*/private Integer code;private Object data;public ExcuteExcption(Integer code, String message) {this(code, message, null, null);}public ExcuteExcption(String message) {super(message);}public ExcuteExcption(String message, Throwable cause) {super(message, cause);}public ExcuteExcption(Integer code, String message, Object data, Throwable cause) {super(message, cause);this.code = code;this.data = data;}public Integer getCode() {return code;}public Object getData() {return data;}
}

这样有异常就可以返回到前端。这样就解决了捕获异常值返回给前端。

不过,这个是执行sql的,如果报错,要进行回滚, 结合《trycatch事务回滚》

再执行,有抛出异常,但是没有回滚了。

这时候如何处理?

手动回滚,并不管用了。也没想到其它好的方式去处理。

我想到的是,输出异常日志,然后直接返回异常值。后续有想到更好的方式,再优化。

直接返回异常值:

 private static final Logger LOGGER = LoggerFactory.getLogger(ExcuteSqlService.class);@Transactionalpublic Object uploadSqlFile(String sqlStr){return splitExcuteSql(sqlStr);}@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)public Object splitExcuteSql(String sqlStr) {JSONObject result = new JSONObject();String[] split = sqlStr.split(";");List<String> sqlList = new ArrayList<>(Arrays.asList(split));try {for (String sql : ListUtils.emptyIfNull(sqlList)) {if (StringUtils.isNotBlank(sql)) {
//                    executeSqls(sql.trim()); // 执行sql}}result.put("msg", "执行完成");} catch (Exception e) {String message = e.getMessage();if (message.contains("PRIMARY")) {message = message + " 主键重复,请增大序列当前值,再进行插入!";}LOGGER.error(message);result.put("msg", message);}return result;}

总结:

捕获异常到返回值,分两步: 1,捕获异常;2,将异常的内容赋值给返回值。 可以弄一个统一的返回值进行处理,其他方法继承调用

java 抛出异常到返回值相关推荐

  1. java中的返回值到底有什么用?

    今天看到一个有意思的问题:java中的返回值到底有什么用? 看到了一个高赞回答如下: 你是公司的老总,然后你跟你秘书说,我想要两张的电影票.然后,你秘书去排队买票,最后把两张电影票给你,这两张电影票就 ...

  2. java for循环返回值_Java中的for循环——通过示例学习Java编程(9)

    作者:CHAITANYA SINGH 来源:https://www.koofun.com/pro/kfpostsdetail?kfpostsid=21 循环用于反复执行同一组语句,直到满足特定条件为止 ...

  3. java 函数参数 返回值_java中如何用函数返回值作为post提交的参数?

    1.我想实现的功能是在java程序中导入HttpURLConnection类,然后将函数的值作为post方法要提交的参数,最后显示在显示台上. 2.要用到的函数是自己写的可以显示实时计算机cpu.内存 ...

  4. java f.lenth返回值_long length

    描述 所述java.io.RandomAccessFile.getFD()方法返回与此流关联的不透明文件描述符对象. 声明 以下是java.io.RandomAccessFile.getFD()方法的 ...

  5. java函数void返回值是,Java中main()函数的返回值是什么( )。A、StringB、intC、c......

    下面的哪个是Java的关键字()A.stringB.abstractC.NULLD.Boolean Javaapplication中的主类需包含main方法,以下哪项是main方法的正确形参?A.St ...

  6. java 暂停等返回值在执行_java面试技巧(2)

    java面试试题及答案 以下是Java面试问题及答案: 1.简要介绍java程序的健壮性. 答:JAVA 程序会在编译和运行的时候自动的检测可能出现的错误,而且它是一种强类型语言,对于类型的检查很严格 ...

  7. java delete方法返回值_boolean delete()

    boolean delete() 描述 (Description) java.io.File.delete()方法删除由抽象路径名定义的文件或目录. 要删除目录,该目录必须为空. 声明 (Declar ...

  8. java调用c 返回值_推荐--Linux平台下Java调用C函数(补充关于String类型函数返回值)...

    平台介绍 系统:ubuntu10.04 jdk:Java(TM) SE Runtime Environment (build 1.6.0_20-b02) gcc:gcc version 4.4.3 ( ...

  9. Java中带返回值的线程池Future

    如何获取任务执行结果 Java通过ThreadPoolExecutor提供的三个submit()方法和一个FutureTask工具类来支持获得任务执行结果的需求. // 提交Runnable任务 Fu ...

最新文章

  1. Fescar TC-rollback流程
  2. MySQL 七天 学_7天玩转
  3. 万能点位图软件_【像素图】复古提花毛衣+秋风落叶十字绣图,非常适合这个季节...
  4. 自己的JS 监听器。用于选择文字
  5. UVa12166 Equilibrium Mobile修改天平(二叉树+dfs)
  6. 星座图(2020特长生 T4)
  7. [渝粤教育] 广东-国家-开放大学 21秋期末考试计量经济学10551k1
  8. linux如何运行windows游戏,如何在Linux上运行Windows应用程序和游戏 互联网技术圈 互联网技术圈...
  9. 内容营销——网络营销的杀手级武器
  10. java 释放句柄_Java文件句柄释放
  11. java 计算百分比_java前后台计算百分比(保留2位小数)
  12. deepin php7,deepin安装php7
  13. 我国成功研制EB级云存储系统:可满足大数据量存储落地需求
  14. 域渗透|NTLM 中继攻击
  15. P4549【模板】裴蜀定理
  16. 7-7 社交集群 (30 分) (集合数组的方法)
  17. 用博奥如何导入单项工程电子表_博奥工程系列软件实操手册(第五册)
  18. window.print()打印时根据页面高度设置居中显示、设置打印布局(纵向、横向)
  19. Elasticsearch:使用 Elasticsearch Transforms 进行产品推荐
  20. 微信开发限制页面pc端登陆

热门文章

  1. 建立war的maven工程pom文件报错
  2. 本地maven仓库有jar包但是pom却报错
  3. 不懂就要问!网上办的流量卡显示开卡中,这是审核成功了吗?
  4. Xms Xmx PermSize MaxPermSize
  5. angular安装ng-zorro
  6. 录录(高清录屏) - Video321 公开隐私空间
  7. 蚂蚁花呗1-5面(高级):分布式+MySQL+HashMap+线程池+MQ+Redis
  8. SpringBoot优雅实现定时任务
  9. 鸟哥的linux私房菜基础篇第四版 高清 免费下载
  10. 算法之美隆重上市欢迎关注(另附勘误表在此)