error 프로퍼티 지원되는 항목
원하는 스타일로 수정해서 사용 가능하다.
@ControllerAdvice : 컨트롤러에 발생하는 예외를 핸들링 가능하게 지원해준다
@ExceptionHandler : 특정 예외 클래스를 핸들링 가능하게 지원해준다
컨트롤러에서 따로 ExceptionHandler를 구현했을때는
기본 스프링에 있는 basicErrorControllerException이 구현됨.
@ControllerAdivice 선언된 컨트롤러에 있는
@ExceptionHandler vs 기본 컨트롤러 내에서 선언된 @ExceptionHandler
가 있으면 기본컨트롤러가 우선순위로 실행
익셉션 여러종류로 클래스를 선언해서 핸들링 할 수 있다.
--
실습
com.example.advice
ExampleControllerAdvice.java 생성
package com.example.advice;
import javax.servlet.http.HttpServletRequest;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindException;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
import groovyjarjarantlr4.v4.parse.ANTLRParser.finallyClause_return;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
//롬복 로거 자동생성
@ControllerAdvice
@Slf4j
public class ExampleControllerAdvice {
/**
* Exception 발생에 예외처리
* @param e
* @return
*/
@ExceptionHandler(Exception.class)
public ModelAndView handleException(Exception e) {
log.error("handleException",e);
ModelAndView view=new ModelAndView("/error/error");
view.addObject("exception", e);
return view;
}
일반 BoardController.java에 선언
@PostMapping("/test")
@ResponseBody
//responseBody : 비동기로 넘길때 사용하는 방법
// 객체가 json화 되면서 responsebody에 띄워짐
//비동기 api에서 많이 쓰는 요청.
@ExceptionHandler(Exception.class)
public ModelAndView handleException(Exception e) {
logger.error("BoardController handleException",e);
ModelAndView view=new ModelAndView("/error/error");
view.addObject("exception", e);
return view;
}
//boardController에 정의된 이 부분이 먼저 찍히고
//BaseErrorController를 타면서
//default로 정의한 500.html에서 에러가 찍힘.
@ExceptionHandler(Exception.class)
public Exception handleException(Exception e) {
logger.error("BoardController handleException",e);
return e;
}
Model과 @ModelAttribute ModelAndView redirectAttribute의 차이를 알고싶은경우
출처 : https://u-it.tistory.com/entry/Controller%EC%97%90%EC%84%9C-view%EB%A1%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EC%86%A1%EC%9A%94%EC%B2%AD-Model-ModelAttribute-ModelAndView-redirecAttribute