Spring Bootの例外処理で@RestControllerAdviceを使用するサンプルです。
(確認環境:Spring Boot 2.5,JDK 11)
目次
サンプル | 例外処理(@RestControllerAdvice)のサンプル |
コントローラのクラス(MainController.java) | |
コントローラアドバイス(TestControllerAdvice.java) |
例外処理(@RestControllerAdvice)のサンプル
コントローラクラス(MainController.java)でJSONを受信します。
強制的に例外を発生させ@RestControllerAdviceがあるクラス(TestControllerAdvice.java)で例外をキャッチしレスポンスを返します。
以下のURLでアクセスします。
http://localhost:8765
githubにコードがあります。
https://github.com/ut23405/springboot/tree/master/springboot-RestControllerAdvice
コントローラが受信するJSON
{
"color1": "赤",
"color2": "黄"
}
コントローラのクラス(MainController.java)
package com.example.demo;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MainController {
@PostMapping
public String output1(@RequestBody Color color) {
System.out.println(color.getColor1());
System.out.println(color.getColor2());
int i = 5;
if (i == 5) {
throw new NullPointerException();
}
return "test";
}
}
10行目の@RequestBodyはJSONを受信しColorクラスに値をセットします。
15行目は、確認のためNullPointerExceptionを発生させています。
コントローラアドバイス(TestControllerAdvice.java)
package com.example.demo;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class TestControllerAdvice {
@ExceptionHandler(NullPointerException.class)
public String test(HttpServletRequest request) {
return request.getLocalAddr();
}
}
8行目に@RestControllerAdviceアノテーションを追加します。全コントローラが対象になります。
11行目は、@ExceptionHandlerでNullPointerExceptionの例外をキャッチします。
関連の記事