抛出异常后,还可以返回提示给前台吗?

xiaoku617 2018-05-06 07:24:02

@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
public Map<String, Object> saveNewOrder(Order order) {
Map<String, Object> map = new HashMap<>();

//保存订单
try {
orderMapper.insertOrder(order);
} catch (Exception e) {
throw new RuntimeException("6546666666666666666666666");
}

//保存日志
try {
orderLogMapper.insertLog(orderLog);
} catch (Exception e) {
throw new RuntimeException(e);
map.put("code", "1002");
map.put("msg", "创建订单日志异常");
return map;
}

Map<String, Object> data = new HashMap<>();
map.put("code", "0");
return map;
}


如代码所示,假设保存日志失败,throw new RuntimeException(e);后,回滚成功。但后面的代码都不会执行了。
问题:抛出异常后,还可以返回自定义的提示内容给前台吗?避免返回服务器的出错代码给前台。

谢谢~
...全文
4720 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_44233326 2020-11-24
  • 打赏
  • 举报
回复
666,谢谢了
聪头 2018-05-17
  • 打赏
  • 举报
回复 1
增加finally{,把后边必须执行的}放到里面
木子0204 2018-05-16
  • 打赏
  • 举报
回复 1
引用 1 楼 tianfang 的回复:
需要转义错误信息,把技术错误翻译成业务错误信息
对的就是这样的, 翻译给前台去处理提示给客户
  • 打赏
  • 举报
回复
抛出异常,秉着谁接受谁处理,谁调用谁处理的原则,你这个方法SpingMVC内部调用的,会由MVC处理,runtimeException应该会终止掉这个操作,前台可能接受的是500
maradona1984 2018-05-07
  • 打赏
  • 举报
回复 1
一般情况下在最外层处理异常即可 如果springmvc,弄一个bean继承HandlerExceptionResolver,然后再封装异常信息,如果是其他,可以考虑在最外层做个过滤器try catch异常,然后把异常消息包装,如果是自定义异常,则响应异常的message,如果是其他异常,则直接到500页面 有个小小的建议,方法返回类型最好是具有业务意义的类型,而不是跟业务无关的消息,提示消息通过异常传递,这样代码简单明了,还有try catch异常记得打印日志
tianfang 2018-05-06
  • 打赏
  • 举报
回复
需要转义错误信息,把技术错误翻译成业务错误信息

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧