抛出异常,想把异常信息返回给前端,便于查看。 这时候,要对异常进行捕获,然后赋值给返回值。
简易抛出异常代码@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自定义异常ExcuteExcptionsqlList = 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); } }
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,将异常的内容赋值给返回值。 可以弄一个统一的返回值进行处理,其他方法继承调用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)