인프런 커뮤니티 질문&답변
RequestMapping과 HttpRequestHandler를 같이 사용 할 수 없나요?
작성
·
121
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
아래와 같은 코드를 한번 해봤습니다.
제 생각대로라면 RequestMappingHandlerMapping에 MyHttpRequestHalder가 등록되어 getHandler시 가져오고
이것을 getHandlerAdapter가 HttpRequestHandlerAdapter를 찾아 handleRequest를 수행해 줄것이라 생각했는데
생각처럼 동작하지 않네요.
handler와 adapter는 인터페이스로 되어 있어 어떤조합이든 되는게 아니었나요?
좀 헷갈립니다.
@Controller
@RequestMapping("/springmvc/request-handler")
public class MyHttpRequestHandler implements HttpRequestHandler {
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().write("ok");
}
}답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 박기자님.
Spring MVC에서는 @RequestMapping과 HttpRequestHandler를 동시에 사용하는 것은 적절하지 않습니다. 이러한 동작은 메커니즘의 차이로 인해 기대와 다른 결과를 가져옵니다.
@RequestMapping은 주로 애노테이션 기반의 컨트롤러에서 사용되며, RequestMappingHandlerMapping과 RequestMappingHandlerAdapter의 조합에서 작동합니다. 즉, Spring MVC의 애노테이션 기반 방식에서 URL 패턴과 특정 메서드를 매핑해주는 역할을 합니다.
반면에 HttpRequestHandler는 간단히 과거의 Servlet 방식을 지원하기 위한 것으로, HttpRequestHandlerAdapter에서 처리하게 됩니다. 이 경우는 주로 Servlet-like 스타일의 핸들러를 사용할 때, 즉 애노테이션 기반이 아닌 XML 설정이나 기타 콤포넌트 스캔을 위한 것입니다.
즉, 두 개의 메커니즘은 서로를 대체하거나 보완하는 것이 아니라 각자의 방식에 맞게 분리된 역할을 수행합니다. 따라서 MyHttpRequestHandler가 HttpRequestHandlerAdapter에서 올바르게 동작하도록 연관되지 않습니다. 이를 이해하는 데 도움이 될 관련 질문과 답변 URL을 제공합니다.
- 스프링 MVC에서 핸들러 매핑 -
@RequestMapping사용에 따른 컨트롤러 매핑에 대한 설명을 참고하시면 도움이 될 것 같습니다.
- 핸들러와 어댑터 -
RequestMappingHandlerAdapter와HttpRequestHandlerAdapter의 차이에 대해 다루고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





그렇다면 아래의 경우 @RestController는 @Controller 어노테이션의 Value를 사용하기 때문에 BeanNameUrlHandlerMapping 을 사용하므로 기존의 일반 @Controller 어노테이션을 사용하는것과 같은 효과를 지니게 되겠네요
그리고 RequestMapping을 사용할 경우에는 항상
RequestMappingHandlerMapping과RequestMappingHandlerAdapter를 사용하게 되도록 고정 되어 있는것이라고 생각하면 될까요?