[SPRING] 스프링 부트 - 오류 처리
SPRING스프링 부트 - 오류 처리
난 가능한 오류 (봄, SQL 등) 잡을 내 컨트롤러에 대한 봄 - 부팅 오류 처리기를 작성하려고합니다. 지금까지 Null과 함께 JSON 응답을 얻을 수 있지만 내부에 데이터를 넣을 수는 없습니다. 오류 메시지가 나타나면 빈 페이지가 나타납니다.
import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.http.HttpServletRequest;
import org.springframework.boot.autoconfigure.web.ErrorController;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException;
@RestController
public class BasicErrorController implements ErrorController {
private static final String ERROR_PATH = "/error";
@RequestMapping(value=ERROR_PATH)
@ExceptionHandler(value = {NoSuchRequestHandlingMethodException.class, SQLException.class, IOException.class, RuntimeException.class, Exception.class})
public ErrorBody defaultErrorHandler(HttpServletRequest request, Exception e) {
ErrorBody eBody = new ErrorBody();
eBody.setMessage(e.getCause().getMessage());
return eBody;
}
}
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class ErrorBody {
private String dateTime;
private String exception;
private String url;
private String message;
}
해결법
-
==============================
1.다음과 같이 할 수 있습니다.
다음과 같이 할 수 있습니다.
@ControllerAdvice public class ControllerExceptionTranslator { @ExceptionHandler(EntityNotFoundException.class) @ResponseStatus(HttpStatus.NOT_FOUND) @ResponseBody SimpleErrorMessage handleException(EntityNotFoundException exception){ log.debug("Entity Not Found Exception {}",exception.getMessage()); log.trace(exception.getMessage(),exception); return new SimpleErrorMessage("Entity not found","This resource was not found"); } @ExceptionHandler({UsernameNotFoundException.class}) @ResponseStatus(HttpStatus.UNAUTHORIZED) @ResponseBody SimpleErrorMessage handleException(UsernameNotFoundException exception){ log.debug("Username not found {}",exception.getLocalizedMessage()); log.trace(exception.getMessage(),exception); return new SimpleErrorMessage("Unaouthorized"," "); } }
-
==============================
2.오류에 대한 데이터를 얻고 "HttpServletRequest 요청"을 사용하고 요청에서 정보를 읽음으로써 json으로 적절하게 보낼 수있었습니다.
오류에 대한 데이터를 얻고 "HttpServletRequest 요청"을 사용하고 요청에서 정보를 읽음으로써 json으로 적절하게 보낼 수있었습니다.
@RequestMapping(value = ERROR_PATH) public ErrorBody defaultErrorHandler(HttpServletRequest request) {....}
-
==============================
3.여기는 @ExceptionHandler (Exception.class)의 예입니다.
여기는 @ExceptionHandler (Exception.class)의 예입니다.
https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
@ControllerAdvice를 사용할 수 있습니다.
package demo.controller; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.ModelAttribute; @ControllerAdvice public class ExceptionControllerAdvice { @InitBinder public void initBinder(WebDataBinder binder) { System.out.println("controller advice: init binder"); } @ExceptionHandler(Exception.class) public String exception(Exception e) { System.out.println("controller advice: exception Handler"); System.out.println(e.getMessage()); return "error"; } @ModelAttribute public void modelAttribute(){ System.out.println("controller advice:model Attribute"); } }
from https://stackoverflow.com/questions/28501154/spring-boot-error-handling by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] context : property-placeholder가 참조를 해석하지 않습니다. (0) | 2019.03.21 |
---|---|
[SPRING] 봄 보안 (3.0.x) 및 사용자 가장 (0) | 2019.03.21 |
[SPRING] 자바 8 잭슨 검증 (0) | 2019.03.21 |
[SPRING] 와일드 카드 컨트롤러 경로가있는 동안 정적 컨텐츠를 제공하는 Spring (0) | 2019.03.21 |
[SPRING] Spring / Hibernate 예외 : createCriteria가 활성 트랜잭션없이 유효하지 않습니다. (0) | 2019.03.21 |