javascript
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字段
- 添加異常處理程序方法
讓我們考慮一下方法。 @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級別的異常。 
翻譯自: https://www.javacodegeeks.com/2013/12/spring-rest-exception-handling-vol-1.html
rest spring
總結
以上是生活随笔為你收集整理的rest spring_Spring REST:异常处理卷。 1个的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 民生信用卡怎么设置查询密码(民生信用卡a
- 下一篇: AWS共享资源的警告
