中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

長(zhǎng)治網(wǎng)站建設(shè)哪家好自助建站平臺(tái)源碼

長(zhǎng)治網(wǎng)站建設(shè)哪家好,自助建站平臺(tái)源碼,羅湖醫(yī)院網(wǎng)站建設(shè),wordpress js代碼插件下載RestControllerAdvice 是 Spring 4 引入的一個(gè)組合注解,它結(jié)合了 ControllerAdvice 和 ResponseBody,專(zhuān)門(mén)用于處理 RestController 類(lèi)型的控制器中的全局異常、全局?jǐn)?shù)據(jù)綁定和全局模型屬性等問(wèn)題。在 Spring Boot 中,RestControllerAdvice 通…

@RestControllerAdvice 是 Spring 4 引入的一個(gè)組合注解,它結(jié)合了 @ControllerAdvice@ResponseBody,專(zhuān)門(mén)用于處理 @RestController 類(lèi)型的控制器中的全局異常、全局?jǐn)?shù)據(jù)綁定和全局模型屬性等問(wèn)題。在 Spring Boot 中,@RestControllerAdvice 通常用于統(tǒng)一處理應(yīng)用中的異常,確保系統(tǒng)中的異常處理邏輯集中管理。

1. @RestControllerAdvice 的組成

@RestControllerAdvice 實(shí)際上是兩個(gè)注解的組合:

  • @ControllerAdvice:是一個(gè)用于全局處理 Spring MVC 中異常的注解,它的作用范圍不僅限于某個(gè)單一的控制器,而是全局適用。
  • @ResponseBody:表示返回的對(duì)象會(huì)自動(dòng)序列化為 JSON 格式,直接作為 HTTP 響應(yīng)體返回。

因此,@RestControllerAdvice 結(jié)合了這兩者的功能,表示該類(lèi)是一個(gè)控制器增強(qiáng)器,可以全局處理異常、模型屬性或數(shù)據(jù)綁定等,而且返回的結(jié)果會(huì)直接作為 HTTP 響應(yīng)體(通常是 JSON 格式)返回給客戶端。

2. @RestControllerAdvice 的功能

@RestControllerAdvice 主要有以下幾個(gè)功能:

1. 全局異常處理 (@ExceptionHandler)

@RestControllerAdvice 可以結(jié)合 @ExceptionHandler 注解來(lái)全局處理異常。應(yīng)用中拋出的異常會(huì)被該類(lèi)中的方法捕獲并處理,然后返回合適的響應(yīng)結(jié)果。

例如:

@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public ResultData handleException(Exception e) {log.error("Global exception occurred: ", e);return ResultData.fail("500", "Internal Server Error");}
}
  • @ExceptionHandler(Exception.class):表示該方法將處理所有類(lèi)型的 Exception 異常。
  • handleException 方法會(huì)捕獲到任何未被其他異常處理器捕獲的 Exception,然后返回統(tǒng)一的錯(cuò)誤響應(yīng)。
2. 全局模型屬性 (@ModelAttribute)

@RestControllerAdvice 可以在控制器方法執(zhí)行前,通過(guò) @ModelAttribute 注解向所有的控制器方法添加公共模型屬性。這樣,所有的控制器方法都可以訪問(wèn)到這些公共屬性。

例如:

@RestControllerAdvice
public class GlobalModelAttribute {@ModelAttributepublic void addAttributes(Model model) {model.addAttribute("globalAttribute", "This is a global attribute");}
}
  • @ModelAttribute 注解的方法會(huì)在每個(gè)控制器方法執(zhí)行之前執(zhí)行。這里添加了一個(gè)名為 globalAttribute 的屬性,這個(gè)屬性會(huì)自動(dòng)添加到每個(gè)控制器方法的 Model 中。
3. 全局?jǐn)?shù)據(jù)綁定 (@InitBinder)

@RestControllerAdvice 也可以通過(guò) @InitBinder 注解定義全局的數(shù)據(jù)綁定方法。@InitBinder 用于初始化數(shù)據(jù)綁定,通常用于處理請(qǐng)求參數(shù)的格式化和轉(zhuǎn)換。

例如:

@RestControllerAdvice
public class GlobalDataBinder {@InitBinderpublic void initBinder(WebDataBinder binder) {binder.setDisallowedFields("password");}
}
  • @InitBinder 注解的方法可以用來(lái)處理請(qǐng)求參數(shù)的綁定和驗(yàn)證。在上面的例子中,所有請(qǐng)求參數(shù)中的 password 字段將被排除在外,不能進(jìn)行綁定。

3. 常見(jiàn)用法

1. 全局異常處理

在 Spring Boot 中,異常處理通常分為兩種:

  • 局部異常處理:每個(gè)控制器方法使用 try-catch 語(yǔ)句或者 @ExceptionHandler 處理特定的異常。
  • 全局異常處理:通過(guò) @RestControllerAdvice 統(tǒng)一處理整個(gè)應(yīng)用中的異常。

示例:

@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)public ResultData<String> handleException(Exception e) {log.error("Unexpected exception occurred: ", e);return ResultData.fail("500", "Internal Server Error");}@ExceptionHandler(ResourceNotFoundException.class)@ResponseStatus(HttpStatus.NOT_FOUND)public ResultData<String> handleResourceNotFound(ResourceNotFoundException e) {log.error("Resource not found: ", e);return ResultData.fail("404", e.getMessage());}
}
  • 通過(guò) @ExceptionHandler 注解,可以指定不同的異常類(lèi)型來(lái)進(jìn)行處理。例如,Exception 類(lèi)的異常返回 500 錯(cuò)誤,ResourceNotFoundException 返回 404 錯(cuò)誤。
  • 使用 @ResponseStatus 注解可以自定義返回的 HTTP 狀態(tài)碼。
2. 返回統(tǒng)一格式的響應(yīng)

在實(shí)際應(yīng)用中,通常會(huì)要求所有的 API 響應(yīng)都遵循統(tǒng)一的格式。使用 @RestControllerAdvice 可以確保異常處理的響應(yīng)符合統(tǒng)一的格式。

示例:

public class ResultData<T> {private String code;private String message;private T data;// 省略構(gòu)造方法、getter、setter等
}

GlobalExceptionHandler 中,可以返回 ResultData 類(lèi)型的對(duì)象,確保所有的異常響應(yīng)都有一致的結(jié)構(gòu):

@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public ResultData<String> handleException(Exception e) {return new ResultData<>("500", "Internal Server Error", null);
}
3. 全局模型屬性和數(shù)據(jù)綁定

@RestControllerAdvice 還可以用來(lái)定義全局的模型屬性和數(shù)據(jù)綁定邏輯。比如,可以在全局中設(shè)置一些公共的參數(shù),或者格式化請(qǐng)求參數(shù)。

示例:

@RestControllerAdvice
public class GlobalDataBinder {@InitBinderpublic void initBinder(WebDataBinder binder) {binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));}
}

在這個(gè)例子中,@InitBinder 配置了一個(gè)全局的數(shù)據(jù)綁定,允許所有的控制器方法接收和格式化 Date 類(lèi)型的參數(shù)。

4. @RestControllerAdvice 的優(yōu)勢(shì)

  • 集中管理異常:通過(guò) @RestControllerAdvice,你可以把全局的異常處理邏輯集中在一個(gè)地方,而不需要在每個(gè)控制器中重復(fù)寫(xiě)異常處理代碼。
  • 統(tǒng)一的錯(cuò)誤響應(yīng):能夠保證整個(gè)應(yīng)用中返回的錯(cuò)誤響應(yīng)有統(tǒng)一的結(jié)構(gòu)(例如 ResultData)。
  • 增強(qiáng)可維護(hù)性:集中式的異常處理和數(shù)據(jù)綁定配置使得代碼更易維護(hù)和擴(kuò)展。當(dāng)業(yè)務(wù)需求發(fā)生變化時(shí),只需要修改 @RestControllerAdvice 中的邏輯,而無(wú)需修改每個(gè)控制器的代碼。
  • 減少冗余代碼:通過(guò)全局處理,可以避免在多個(gè)控制器中重復(fù)定義相同的異常處理邏輯或數(shù)據(jù)綁定邏輯。
    是的,@RestControllerAdvice@ControllerAdvice 都可以實(shí)現(xiàn)相似的功能,特別是在處理全局模型屬性和數(shù)據(jù)綁定時(shí),使用 @ControllerAdvice 是完全可以的。兩者的區(qū)別主要體現(xiàn)在以下幾個(gè)方面:

5.@RestControllerAdvicevs@ControllerAdvice

@RestControllerAdvice vs @ControllerAdvice

  • @ControllerAdvice 是 Spring 的一個(gè)用于全局處理控制器異常、數(shù)據(jù)綁定、模型屬性等的注解,適用于所有類(lèi)型的控制器。它結(jié)合了 @Controller@ResponseBody 的功能,用于處理普通的控制器(即返回視圖的控制器,通常是 .jsp、.html 等)。

  • @RestControllerAdvice@ControllerAdvice@ResponseBody 的組合注解,適用于 RESTful 風(fēng)格的控制器,即返回 JSON 或 XML 等數(shù)據(jù)的控制器。它與 @RestController 結(jié)合使用,可以自動(dòng)將返回值轉(zhuǎn)換為 JSON 格式的響應(yīng)體,而 @ControllerAdvice 適用于傳統(tǒng)的基于視圖的控制器。

具體區(qū)別

  • 返回類(lèi)型

    • @ControllerAdvice 默認(rèn)處理的是基于視圖的返回類(lèi)型,也就是說(shuō),它通常返回的是頁(yè)面視圖(例如 .jsp、.html)而非 JSON 數(shù)據(jù)。
    • @RestControllerAdvice 用于 RESTful API 服務(wù),它默認(rèn)會(huì)返回 JSON 數(shù)據(jù),而不需要額外配置 @ResponseBody。
  • 場(chǎng)景選擇

    • 使用 @ControllerAdvice:如果你的應(yīng)用主要是傳統(tǒng)的 Spring MVC 控制器(處理視圖渲染),那么 @ControllerAdvice 是合適的。
    • 使用 @RestControllerAdvice:如果你的應(yīng)用是基于 RESTful API 服務(wù),返回 JSON 或 XML 數(shù)據(jù),并且你希望所有的異常處理、數(shù)據(jù)綁定、模型屬性等也以 JSON 格式返回,那么 @RestControllerAdvice 更為合適。

實(shí)際應(yīng)用中的選擇

  • 如果你在做的是 傳統(tǒng)的 Spring MVC 應(yīng)用,并且通過(guò)控制器返回的是 視圖(HTML),那么使用 @ControllerAdvice 是合適的。
  • 如果你在做的是 RESTful API 應(yīng)用,返回的是 JSON 或 XML 數(shù)據(jù),并且希望全局異常、全局?jǐn)?shù)據(jù)綁定、全局模型屬性等都以 JSON 格式返回給客戶端,那么 @RestControllerAdvice 更為合適。

總結(jié)

@RestControllerAdvice 是 Spring 提供的一個(gè)功能強(qiáng)大的注解,允許你為整個(gè)應(yīng)用提供全局的異常處理、全局模型屬性和全局?jǐn)?shù)據(jù)綁定等功能。它的主要優(yōu)勢(shì)是能夠集中管理異常處理,并且提供統(tǒng)一的響應(yīng)結(jié)構(gòu),使得應(yīng)用程序更加清晰、易于維護(hù),尤其在處理大規(guī)模應(yīng)用時(shí),能夠極大地減少代碼冗余,提高開(kāi)發(fā)效率和系統(tǒng)的健壯性。

http://www.risenshineclean.com/news/11962.html

相關(guān)文章:

  • 公司備案網(wǎng)站被注銷(xiāo)嗎杭州網(wǎng)站建設(shè)技術(shù)支持
  • 黑群暉做網(wǎng)站seo簡(jiǎn)介
  • 做民宿要給網(wǎng)站多少合同錢(qián)專(zhuān)業(yè)的網(wǎng)站優(yōu)化公司排名
  • 淘寶聯(lián)盟做網(wǎng)站友情鏈接平臺(tái)哪個(gè)好
  • 肇慶企業(yè)做網(wǎng)站品牌推廣方案模板
  • 招聘網(wǎng)頁(yè)設(shè)計(jì)師全域seo
  • 去施工網(wǎng)seo獨(dú)立站
  • 哪個(gè)網(wǎng)站的pc端是用vue做的整站優(yōu)化外包服務(wù)
  • 不買(mǎi)域名怎么做網(wǎng)站不要手賤搜這15個(gè)關(guān)鍵詞
  • 怎么做高端品牌網(wǎng)站設(shè)計(jì)科技公司網(wǎng)站制作公司
  • 網(wǎng)站網(wǎng)站制作服務(wù)自助建站系統(tǒng)源碼
  • 快捷做網(wǎng)站網(wǎng)絡(luò)營(yíng)銷(xiāo)的基本功能
  • 網(wǎng)站建設(shè)多少錢(qián)一個(gè)站世界十大網(wǎng)站排名出爐
  • flash相冊(cè)網(wǎng)站源碼旅行網(wǎng)站排名前十名
  • 做圖片格式跟尺度用哪個(gè)網(wǎng)站好站長(zhǎng)統(tǒng)計(jì)app下載
  • 頁(yè)面設(shè)計(jì)的網(wǎng)站大連網(wǎng)絡(luò)推廣
  • 電商網(wǎng)站建設(shè)渠道網(wǎng)站開(kāi)發(fā)培訓(xùn)
  • 長(zhǎng)春網(wǎng)站制作都找源晟27seo搜索優(yōu)化排名
  • 網(wǎng)站正能量不用下載直接進(jìn)入主頁(yè)可以嗎搜索引擎哪個(gè)好用
  • 如何查看網(wǎng)站備案號(hào)天津seo博客
  • 手機(jī)網(wǎng)站制作哪家便宜日本比分算1:1
  • 網(wǎng)站手機(jī)微信三合一怎么做搜索引擎營(yíng)銷(xiāo)的優(yōu)勢(shì)和劣勢(shì)
  • 網(wǎng)站基礎(chǔ)知識(shí)域名5個(gè)點(diǎn)品牌定位
  • 柴溝堡做網(wǎng)站公司seo網(wǎng)站推廣方式
  • 做糕點(diǎn)哪個(gè)網(wǎng)站鄂州網(wǎng)站seo
  • 建設(shè)網(wǎng)站的公司如何做網(wǎng)站設(shè)計(jì)
  • 論壇網(wǎng)站建設(shè)軟件網(wǎng)站優(yōu)化公司認(rèn)準(zhǔn)樂(lè)云seo
  • 網(wǎng)站服務(wù)器證書(shū)有問(wèn)題超級(jí)外鏈發(fā)布工具
  • 金華建站價(jià)格深圳電子網(wǎng)絡(luò)推廣查詢
  • 起零網(wǎng)站建設(shè)信息流優(yōu)化師簡(jiǎn)歷怎么寫(xiě)