작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
39
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예
[질문 내용]
1. resources/templates/error/4xx.html 만 존재할 때
localhost:8080/error-404 -> 4xx.html 응답
localhost:8080/error-400 -> 4xx.html 응답
resources/templates/error/4xx.html, resources/templates/error/404.html 이 모두 존재할 때
localhost:8080/error-404 -> 404.html 응답
localhost:8080/error-400 -> 404.html 응답 -> 여기서 4xx.html이 응답해야하는거 아닌가요?
파일 경로에는 문제가 없는데 페이지 소스를 봐도 404.html이 맞습니다.
답변 2
0
우리가 /error-400
으로 요청한다고 해서 서버에서 400 에러가 발생하는 것은 아닙니다. 지금은 ServletExceptionController
의 /error-404
경로에 매핑된 컨트롤러 메서드 내부에서 sendError(404)
를 호출하므로 경로와 발생 에러가 일치하는 것입니다.
따라서 작성자님의 의도대로 하려면 ServletExceptionController
코드에 아래 코드를 추가해주시고, /error-400
으로 요청하시면 4xx.html
이 렌더됩니다.
@GetMapping("/error-400")
public void error400(HttpServletResponse response) throws IOException {
response.sendError(400, "400 오류!");
}
질문자님의 현재 상태에서의 /error-400
요청은 존재하지 않는 페이지에 대한 요청이고, 이 경우에는 기본적으로 404 에러가 발생합니다.
요청 경로에 400이라고 적는다고 해서 마법처럼 400 에러가 발생하지 않는다는 것이죠.
0
안녕하세요, 인프런 AI 인턴입니다. hxhxhx님.
질문해주신 내용은 Spring Boot의 기본 오류 페이지 처리 순서와 관련이 있습니다. Spring Boot에서는 기본적으로 error 페이지를 뷰 리졸버(view resolver)를 사용하여 templates 디렉토리 아래의 error 폴더에서 찾습니다.
먼저 두 가지 경우로 나눠보면,
resources/templates/error/4xx.html 만 존재할 때: 모든 4xx 오류에 대해 4xx.html
파일이 렌더링됩니다. 구체적인 404 에러 페이지가 없기 때문에 4xx 에러 페이지가 사용됩니다.
resources/templates/error/4xx.html, resources/templates/error/404.html이 모두 존재할 때: Spring Boot는 보다 구체적인 오류 코드를 우선하기 때문에 404에러마다 404.html
파일이 사용됩니다. 동일하게 400에러도 404.html
이 사용되는 이유는, 기본적으로 관련 설정이 되어 있지 않고, 406 Not Acceptable
등의 처리 방식이 404
페이지로 매칭되기 때문입니다. 구체적으로 400과의 우선순위 문제라기 보다는, 설정의 구체성이 없기 때문에 전반적인 방식으로 404로 처리되고 있습니다.
이와 관련된 더 많은 정보를 원하신다면 다음과 같은 기존 질문을 참고하실 수 있습니다:
우선순위 관련 설정에 대해 더 깊이 다루는 강의나 자료를 확인해보고, 보다 명확한 우선순위 설정이 필요할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
비슷한 예로, 컨트롤러 메서드가 존재하지 않는
/error-505
로 요청해도 404 not found 에러 페이지가 렌더됩니다.