Spring WebMVCをやってみる (9) - @ExceptionHandler -
タイトル通り、例外が発生すると特定の@ExceptionHandlerがついてるメソッドが発動して処理を促せるような物らしい
SampleController.java
package sample;
import java.io.IOException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/sample")
public class SampleController {
@RequestMapping
public void index() throws Exception {
throw new IOException("ERROR");
}
@ExceptionHandler(Exception.class)
public String handleException(Throwable t) {
return "redirect:/error.html";
}
}
SampleControllerTest.java
package swmvc;
import java.io.IOException;
import org.junit.Test;
import org.springframework.test.web.servlet.MvcResult;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
public class SampleControllerTest extends AbstractTestCase {
@Test
public void test_index() throws Exception {
MvcResult result = mock.perform(get("/sample"))
.andExpect(status().isFound())
.andExpect(redirectedUrl("/error.html"))
.andReturn();
Exception e = result.getResolvedException();
assertThat(e, instanceOf(IOException.class));
assertThat(e.getMessage(), is("ERROR"));
}
}
追記
資料によると
@ExceptionHandlerはリクエストがController内で発生した例外のみキャッチ可能
とのこと