Spring WebMVCをやってみる (9) - @ExceptionHandler -

2013-12-14T00:00:00+00:00 Java Spring Framework

タイトル通り、例外が発生すると特定の@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内で発生した例外のみキャッチ可能

とのこと

Spring WebMVCをやってみる (10) - gsonを使う - Spring WebMVCをやってみる (8) - @ModelAttribute -