java 抛出异常到返回值

您所在的位置:网站首页 提取票面返回异常怎么回事 java 抛出异常到返回值

java 抛出异常到返回值

2024-07-17 13:12| 来源: 网络整理| 查看: 265

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

简易抛出异常代码 @Transactional public 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 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); @Transactional public 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 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,将异常的内容赋值给返回值。 可以弄一个统一的返回值进行处理,其他方法继承调用



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3