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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

rest spring_Spring REST:异常处理卷。 1个

發布時間:2023/12/3 javascript 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rest spring_Spring REST:异常处理卷。 1个 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

rest spring

目錄

  • Spring REST:異常處理卷。 1個
  • Spring REST:異常處理卷。 2
  • Spring REST:異常處理卷。 3

大家好,是時候繼續在我的博客中發布新文章了。 因此,我很高興地宣布,我計劃撰寫一些技術性的系列文章。 在當前文章中,我將開始討論Spring REST異常處理。 Spring向我們建議了REST異常處理的幾種方法,但是我想將您的注意力集中在其中兩種方法上:

  • @Controller級別的@ExceptionHandler
  • @ControllerAdvice級別的@ExceptionHandler

所有代碼示例都將使用我在先前有關REST服務的文章中使用的應用程序開發。 JQuery將在客戶端提供與REST服務的交互。

因此,在簡要介紹之后,我要進行總結。 我們將考慮REST異常處理程序的三個示例。 這三種情況中的每一種都將描述在任何項目中可能發生的某些實際情況的解決方案。 所有開發將在已經存在的應用程序之上進行。

制備

我想做的第一件事- 將 MessageSource 添加到應用程序中。 這不是很困難,我不想在此停止詳細介紹,因為我已經在另一篇文章中解釋了如何執行此操作。 MessageSource的目的是存儲錯誤消息,如果拋出異常,我想返回給客戶端。

因此,這是一個messages.properties文件:

error.bad.smartphone.id = Smartphone can't have id:

成功添加MessageSource之后,我們可以在@Controller級別繼續進行異常處理。

異常處理

在這一段中,我想重點介紹可能發生異常的代碼段。 讓我們檢查來自SmartphoneController的一些方法。

...@RequestMapping(value="/edit/{id}", method=RequestMethod.GET)public ModelAndView editSmartphonePage(@PathVariable int id) {ModelAndView mav = new ModelAndView("phones/edit-phone");Smartphone smartphone = smartphoneService.get(id);mav.addObject("sPhone", smartphone);return mav;} ...@RequestMapping(value="/edit/{id}", method=RequestMethod.PUT, produces = MediaType.APPLICATION_JSON_VALUE,consumes = MediaType.APPLICATION_JSON_VALUE)@ResponseBodypublic Smartphone editSmartphone(@PathVariable int id, @Valid @RequestBody Smartphone smartphone) {smartphone.setId(id);return smartphoneService.update(smartphone);} ...@RequestMapping(value="/delete/{id}", method=RequestMethod.DELETE, produces = MediaType.APPLICATION_JSON_VALUE,consumes = MediaType.APPLICATION_JSON_VALUE)@ResponseBodypublic Smartphone deleteSmartphone(@PathVariable int id) {return smartphoneService.delete(id);} ...

這三種方法具有一個共同的功能– @PathVariable int id 。 這種情況很重要,因為Spring文檔說,如果不能將使用@PathVariable注釋的方法參數強制轉換為指定的類型(在我們的示例中為int),則它將作為String公開。 因此,它可能導致TypeMismatchException 。

為了解決這個問題,我將在@Controller級別使用@ExceptionHandler批注。 這種方法最適合這種情況。 我只需要在SmartphoneController中進行2處更改:

  • 添加MessageSource字段
  • 添加異常處理程序方法
...@Autowiredprivate MessageSource messageSource; ...@ExceptionHandler(TypeMismatchException.class)@ResponseStatus(value=HttpStatus.NOT_FOUND)@ResponseBodypublic ErrorInfo handleTypeMismatchException(HttpServletRequest req, TypeMismatchException ex) {Locale locale = LocaleContextHolder.getLocale();String errorMessage = messageSource.getMessage("error.bad.smartphone.id", null, locale);errorMessage += ex.getValue();String errorURL = req.getRequestURL().toString();return new ErrorInfo(errorURL, errorMessage);} ...

讓我們考慮一下方法。 @ExceptionHandler批注具有參數– TypeMismatchException ,這意味著在發生異常時將觸發該方法。 @ResponseStatus批注用于指定特定的響應狀態代碼。

您可能已經注意到該方法返回ErrorInfo。 這很容易,因為它是任何類型的錯誤的類,需要通知客戶有關錯誤原因的信息。 因此,該類如下所示:

public class ErrorInfo {private String url;private String message;public ErrorInfo(String url, String message) {this.url = url;this.message = message;}//Getters and setters are omitted}

此類的使用為我們提供了兩個主要優點:我們可以提供引起異常的URL,并且可以提供適當的錯誤消息。

現在,讓我們嘗試看看當我嘗試訪問某些ID不可接受的URL時遇到的情況。

您可以在屏幕截圖上看到,具有錯誤ID的URL已按照我在@Controller級別上指定的方式進行了處理。 在下一篇文章中,我將討論一些可以放在@ControllerAdvice級別的異常。

參考: Spring REST:異常處理卷。 Fruzenshtein的筆記博客中來自JCG合作伙伴 Alexey Zvolinskiy的1 。

翻譯自: https://www.javacodegeeks.com/2013/12/spring-rest-exception-handling-vol-1.html

rest spring

總結

以上是生活随笔為你收集整理的rest spring_Spring REST:异常处理卷。 1个的全部內容,希望文章能夠幫你解決所遇到的問題。

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