- 75
- 0
默认spring事务抛出异常回滚只会是runtimeException,有些异常没法直接回滚,需要自己定义回滚的异常类,需要在方法的异常注释里写回滚的异常类型,同时如果方法里没加上throws Exception的话非runtimeException也不会回滚,不知道大家公司里代码规范会不会强制要求方法都加上异常的处理?我看了下阿里的代码规范并没有这部分的规定,但是我感觉如果不加异常控制的话碰到非runtimeException可能就没法回滚了。
- 共 0 条
- 全部回答
-
洅回首ㄨ恍然如梦 普通会员 1楼
在Java中,无论在服务层还是其他任何层,添加抛出异常通常是避免程序出现异常错误的一种常见方式。虽然在服务层方法中可能需要添加异常处理代码,但并不是所有的方法都需要这样做。
以下是一些情况下,是否在服务层每个方法上都添加异常处理的例子:
- 网络请求异常:如果服务层需要处理网络请求,如通过HTTP或HTTPS发送请求,那么每个方法都应添加异常处理代码。这样,如果在请求过程中出现网络错误,例如HTTP状态码500(Internal Server Error)或404(Not Found),请求可以被捕获并抛出一个适当的异常。这将帮助接收者知道具体发生了什么错误,并采取适当的措施来修复或处理它。
```java import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController;
@RestController public class ServiceController {
@PostMapping("/api/v1/data") public ResponseEntity fetchData(@RequestParam String url) { try { // 发送网络请求 ResponseEntity<String> response = restTemplate.getForEntity(url, String.class); // 处理响应 String data = response.getBody(); return ResponseEntity.ok(data); } catch (Exception e) { // 处理网络请求异常 throw new RuntimeException("Failed to fetch data from " + url, e); } }} ```
- 业务逻辑错误:在服务层处理业务逻辑错误时,例如处理用户请求的错误、错误处理或错误传递,可能会在某些方法中添加异常处理代码。这些方法可能包括一些简单的异常处理代码,如检查请求参数是否为空、检查用户是否授权访问特定资源等。如果在处理业务逻辑错误时出现异常,这些方法可以捕获并处理这些异常,例如使用try-catch块或异常处理函数。
```java import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController;
@RestController public class ServiceController {
@PostMapping("/api/v1/data") public ResponseEntity fetchData(@RequestParam String url, @RequestParam String userId) { try { // 检查用户是否授权访问特定资源 if (!isUserAuthorized(userId)) { throw new RuntimeException("User not authorized to access " + url); } // 发送网络请求 ResponseEntity<String> response = restTemplate.getForEntity(url, String.class); // 处理响应 String data = response.getBody(); return ResponseEntity.ok(data); } catch (Exception e) { // 处理网络请求异常 throw new RuntimeException("Failed to fetch data from " + url, e); } } private boolean isUserAuthorized(String userId) { // 访问权限检查逻辑 // ... return true; // 或者返回false表示用户没有权限 }} ```
在上述示例中,我们使用了
@RequestParam注解来处理请求参数,@RequestBody注解来处理请求体。我们还使用了@PostMapping注解来创建一个HTTP请求,@GetMapping或@PostMapping注解可以用于处理HTTP方法(如GET、POST、PUT、DELETE等)。在上述示例中,isUserAuthorized方法用于检查用户是否授权访问特定资源,如果拒绝访问,抛出一个异常。在实际应用中,应根据业务需求和使用的HTTP方法选择适当的异常处理策略。如果服务层代码复杂且包含大量的业务逻辑错误,可能需要在每个方法中添加异常处理代码。如果业务逻辑相对简单且使用HTTP请求处理,可能只需要在处理网络请求的特定方法中添加异常处理代码。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
