[SPRING] 어떻게하면 봄 부팅 / mvc에서 오류 처리기 (404, 500 ...)를 만들 수 있습니까?
SPRING어떻게하면 봄 부팅 / mvc에서 오류 처리기 (404, 500 ...)를 만들 수 있습니까?
몇 시간 동안 봄 부팅 / MVC에서 사용자 지정 전역 오류 처리기를 만들려고합니다. 나는 많은 기사와 아무것도 읽지 않았다 ... : / 제발. 도와주세요.
그건 내 오류 클래스입니다 :
나는 그런 수업을 만들려고 했어.
@Controller
public class ErrorPagesController {
@RequestMapping("/404")
@ResponseStatus(HttpStatus.NOT_FOUND)
public String notFound() {
return "/error/404";
}
@RequestMapping("/403")
@ResponseStatus(HttpStatus.FORBIDDEN)
public String forbidden() {
return "/error/403";
}
@RequestMapping("/500")
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public String internalServerError() {
return "/error/500";
}
}
**** QUESTION SOLVED **** 나는이 방법을 사용했습니다 :
`
@Configuration
public class ErrorConfig implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404"));
}
}
`
해결법
-
==============================
1.다음 코드를 사용해보십시오 :
다음 코드를 사용해보십시오 :
@ControllerAdvice public class ExceptionController { @ExceptionHandler(Exception.class) public ModelAndView handleError(HttpServletRequest request, Exception e) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Request: " + request.getRequestURL() + " raised " + e); return new ModelAndView("error"); } @ExceptionHandler(NoHandlerFoundException.class) public ModelAndView handleError404(HttpServletRequest request, Exception e) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Request: " + request.getRequestURL() + " raised " + e); return new ModelAndView("404"); } }
-
==============================
2.@Arash에 추가 예외에서 http 응답으로의 변환을 처리 할 수있는 확장 가능한 새로운 BaseController 클래스를 추가 할 수 있습니다.
@Arash에 추가 예외에서 http 응답으로의 변환을 처리 할 수있는 확장 가능한 새로운 BaseController 클래스를 추가 할 수 있습니다.
import com.alexfrndz.pojo.ErrorResponse; import com.alexfrndz.pojo.Error; import com.alexfrndz.pojo.exceptions.NotFoundException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; import javax.persistence.NoResultException; import javax.servlet.http.HttpServletRequest; import java.util.List; @Slf4j public class BaseController { @ExceptionHandler(NoResultException.class) public ResponseEntity<Exception> handleNoResultException( NoResultException nre) { log.error("> handleNoResultException"); log.error("- NoResultException: ", nre); log.error("< handleNoResultException"); return new ResponseEntity<Exception>(HttpStatus.NOT_FOUND); } @ExceptionHandler(Exception.class) public ResponseEntity<Exception> handleException(Exception e) { log.error("> handleException"); log.error("- Exception: ", e); log.error("< handleException"); return new ResponseEntity<Exception>(e, HttpStatus.INTERNAL_SERVER_ERROR); } @ExceptionHandler(NotFoundException.class) @ResponseStatus(value = HttpStatus.NOT_FOUND) @ResponseBody public ErrorResponse handleNotFoundError(HttpServletRequest req, NotFoundException exception) { List<Error> errors = Lists.newArrayList(); errors.add(new Error(String.valueOf(exception.getCode()), exception.getMessage())); return new ErrorResponse(errors); } }
-
==============================
3.봄 부팅 용 업데이트
봄 부팅 용 업데이트
사용자 정의 오류 페이지
주어진 상태 코드에 대해 사용자 정의 HTML 오류 페이지를 표시하려면 / error 폴더에 파일을 추가하십시오. 오류 페이지는 정적 HTML (정적 리소스 폴더 아래에 추가됨)이거나 템플릿을 사용하여 빌드 될 수 있습니다. 파일의 이름은 정확한 상태 코드 또는 시리즈 마스크 여야합니다.
예를 들어 404를 정적 HTML 파일에 매핑하려면 폴더 구조가 다음과 같이 표시됩니다
src/ +- main/ +- java/ | + <source code> +- resources/ +- public/ +- error/ | +- 404.html +- <other public assets>
출처
-
==============================
4.희망이 도움이 될 것입니다 : 클래스를 생성하면 런타임 예외를 확장하는 NoProductsFoundException이 발생합니다.
희망이 도움이 될 것입니다 : 클래스를 생성하면 런타임 예외를 확장하는 NoProductsFoundException이 발생합니다.
import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No products found under this category") public class NoProductsFoundException extends RuntimeException{ private static final long serialVersionUID =3935230281455340039L; }
그런 다음 productcontroller에서 :
@RequestMapping("/{category}") public String getProductsByCategory(Model model,@PathVariable("category") String category) { List<Product> products = productService.getProductsByCategory(category); if (products == null || products.isEmpty()) { throw new NoProductsFoundException (); } model.addAttribute("products", products); return "products"; }
-
==============================
5.
@ControllerAdvice public class ErrorHandler { public RestErrorHandler() { } @ExceptionHandler(YourException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public XXX processException(Exception ex){}
이런 수업이 필요해. 각 예외에 대한 메소드를 추가하고 주석 달기 - @ResponseBody 등
from https://stackoverflow.com/questions/38777723/how-i-create-an-error-handler-404-500-in-spring-boot-mvc by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Tomcat은 web.xml없이 앱을 정확하게 부트 스트랩합니까? (0) | 2019.02.02 |
---|---|
[SPRING] Java Spring :`@ Value` 주석을 사용하여`Environment` 속성을 주입하는 방법은 무엇입니까? (0) | 2019.02.02 |
[SPRING] 슬래시 (/)가 포함 된 요청을 처리하는 방법 (0) | 2019.02.02 |
[SPRING] JNDI로 스프링 부트에서 다중 데이터 소스 설정하기 (0) | 2019.02.02 |
[SPRING] Lazy 로딩과 MVC (0) | 2019.02.02 |