日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

controller的异常处理以及service层的事务控制___controller层 trycatch不影响service层抛出的异常

發布時間:2025/3/12 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 controller的异常处理以及service层的事务控制___controller层 trycatch不影响service层抛出的异常 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

controller的異常處理以及service層的事務控制

最近寫代碼涉及到一些事務,上午終于把代碼給理順了,之前不太清楚在哪里做異常處理,導致代碼遍地try-catch,相當難看。

還是基于controller-service-dao三層來寫代碼,從入口開始,controller層的方法對應的是某個url,面向的是應用人員,應該返回他們能讀懂的信息,所以controller必須做異常處理,一般來說會有統一的異常處理方法;

service層面向的是controller,service層中的某些方法,必須保證其事務,所以在service層進行事務控制是相當必要的,對于多條sql進行事務控制,如果某個sql執行失敗,那么應當對已經執行的sql語句進行回滾;

dao層更多是單一的sql語句,沒有必要進行事務控制,因為事務開銷并不便宜(官方原話);

基于以上三點,回頭再思考關于異常的處理,一般情況應該把異常網上拋,一直拋到最終處理的那一層,所以對于dao層和service其實是沒有必要進行try-catch的,直接往上拋異常就可以。

與之對應的,是spring的事務配置,默認情況下,spring只對運行時異常進行回滾,如果在dao層處理了異常,那么需要進行額外的配置,spring才會對異常進行回滾,常用的配置是@Transactional(rollbackFor=Exception.class)

順便提一個java知識點,關于try-catch-finally中,finally的作用,finally設計之初就是為了關閉資源,如果在finally中使用return語句,會覆蓋try或者catch的返回值,最常見的就是覆蓋異常,即便catch往上拋了異常,也會被覆蓋,返回finally中return語句的返回值。

service事務拋錯回滾后,controller在調用該service處會拋出異常嗎?在controller做了異常的處理的情況下,該異常會到controller來么?
因為controller層調用了service層的業務邏輯,因此service出錯controller必將聯動報錯。
service將異常拋給controller層,controller做異常捕捉并能夠進行處理。

controller層 trycatch不影響service層拋出的異常

1.controller層 trycatch不影響service層拋出的異常 因為 service層利用spring
的aop控制異常, 而controller層 try catch 不影響, aop完成之后,才會到controller層,所以不影響,但如果在service try catch 一定要拋出異常 否則 不回滾, @Transactional(rollbackFor = Exception.class) 加這個 不僅僅是RuntimeException

一般Service層怎么向Controller層傳遞業務處理結果呢?

有個疑問想問問大家,就是關于Java三層框架層之間返回業務結果如何處理比較好,以及異常一般怎么處理

比如,
我service層處理邏輯,有四種情況,這種時候我該怎么給controller層返回處理結果?

還有就是.如果我service層發生了異常,比如數據庫異常啦,文件讀寫異常這些,我應該直接在service層catch處理,還是直接拋出到controller層再catch…

我之前也寫過一個在service層catch異常,然后封裝為自定義異常再拋出到controller的.但是這樣處理程序邏輯感覺也不是特別好…

第一個問題,如何返回多種情況傳遞給controller,這個不是很簡單嗎,方法是有返回值的啊,主要是你返回值的數據結構是否合適,你可以用枚舉,可以用map,可以是集合,可以自己封裝dto(data transfer object)
第二個問題,如何處理異常呢,最好不要在service層進行try catch,因為現在基本上都是在service層作業務處理,事務會配置在這一層,try catch會導致事務無法回滾,當然你也可以try catch,但是一定要拋出runTimeException才可以回滾事務。最好的做法是在controller層使用aop進行try catch統一管理

一個關于service層拋異常,controller處理的問題

往數據庫插入數據,由于service拋異常,雖然事務回滾了,但是程序已經不能在執行下去了,那么我在controller的處理沒了用處,頁面正等著controller的返回結果呢,也沒了。難道要我在controller手動 try…cathch嗎?那也太麻煩了。
我說得清楚點:controller等著service的返回結果封裝返回結果集,頁面等著對結果集處理,然后進行下一步操作。現在service崩了,一條線都崩了。難道只能在controller手動try…catch,然后在catch里封裝另一個返回結果集嗎?

spring有統一的異常處理,封裝統一的錯誤返回

總結

以上是生活随笔為你收集整理的controller的异常处理以及service层的事务控制___controller层 trycatch不影响service层抛出的异常的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。