iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 24
1
Modern Web

30天學習Spring MVC系列 第 24

Day24 Spring MVC例外處理篇(Exception Handling in Spring MVC)[下]

  • 分享至 

  • xImage
  •  

前言

基本上我們只需要針對@Controller與@RestController兩種類型的控制器做不同的錯誤處理就行,RestController是較為麻煩設計的,因為你要去針對不同的例外回傳訊息給使用者,不然使用者根本不知道他哪邊出錯了,要是這時候你將他一直導到error.jsp or error.html的頁面,我想沒有哪個User會怒噴你這個爛系統吧

單一例外處理配置

1.我在一個@RestController新增了一個例外處理的方法為Not_Found()

@ResponseStatus(value=HttpStatus.NOT_FOUND,reason="Page is not Exist")
	 @ExceptionHandler(NullPointerException.class)
		  public ResponseEntity<Object> Not_Found() {
		 	System.out.println("進入NullPointerException例外處理");
		 	return new ResponseEntity<Object>(
		          "NOT FOUND THE DATA ", new HttpHeaders(), HttpStatus.NOT_FOUND);
		 }
  • @ResponseStatus :回傳的Http代碼 ex:404,500
  • @ExceptionHandler() : 內可以填入多個Exception.class 我以NullPointerException為例子
  • System.out.println("進入NullPointerException例外處理"); 測試當發生例外是否真的進入此方法
  • return 帶了第一個參數 message: NOT FOUND THE DATA , 第二個參數固定 new HttpHeaders() 產生一個HttpHeaders物件,第三個參數 HttpHeaders的狀態

示意圖如下:
https://ithelp.ithome.com.tw/upload/images/20180112/20107812Sw17tgwCs8.png

我的Get方法做了些改造

@RequestMapping(value="/{id}")
	 public Optional<Memberaccount> read(@ModelAttribute("message") String msg,Model model,@PathVariable long id) {

		Map map = new HashMap();
		String email = map.get("EMAIL").toString();
		if(email == null) throw new NullPointerException(email);
		System.out.println(email);
		return memberapiRepository.findById(id);
	 }

當 email字串為null我就會拋出 NullPointerException的例外,如果你要測試的話可以這樣做,這是唯一的重點

心得

1.如果做了太多種的例外處理其實是對你的程式結構破壞性會很大,盡量要控制住他的成長
2.接下來的六天我已經想好要介紹什麼主題了,請拭目以待吧

參考資源

(http://www.baeldung.com/global-error-handler-in-a-spring-rest-api ) - 作者: baeldung


上一篇
Day23 Spring MVC例外處理篇(Exception Handling in Spring MVC)[上]
下一篇
Day 25 Spring Boot 利用thymeleaf模板引擎與jquery.dataTables.js製作列表頁[View層篇]
系列文
30天學習Spring MVC30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言