RequestMapping 설정이 안됩니다
2364
작성자 없음
작성한 질문수 0
구체 클래스 기반 프록시를 강의와 동일하게 적용해 보았습니다. target에 RequestMapping을 설정했으나 실제로 적용이 되지 않았습니다. (혹시 몰라 proxy에도 설정했었지만 적용되지 않았습니다.)
디버깅 해보면 /v2/request가 없는 거까진 확인했습니다.
답변 2
5
안녕하세요. 스프님^^ 오래 기다리셨습니다
이 문제는 스프링 부트 3.0(스프링 프레임워크6.0) 부터 발생하는 문제입니다. 참고로 이 문제는 프록시와는 무관합니다.
다음 부분을 메뉴얼에 업데이트 해두겠습니다^^
### 스프링 부트 3.0 변경 사항
스프링 부트 3.0 이상이라면 지금까지 작성한 코드에서 2가지를 변경해야 한다.
스프링 부트 3.0(스프링 프레임워크 6.0)부터는 클래스 레벨에 @RequestMapping이 있어도 스프링 컨트롤러로 인식하지 않는다. 오직 @Controller가 있어야 스프링 컨트롤러로 인식한다. 참고로 @RestController는 해당 애노테이션 내부에 @Controller를 포함하고 있으므로 인식 된다.
따라서 다음과 같이 변경해야 한다.
스프링 부트 3.0 미만
@RequestMapping //스프링은 @Controller 또는 @RequestMapping 이 있어야 스프링 컨트롤러로 인식
@ResponseBody
public interface OrderControllerV1 {}
스프링 부트 3.0 이상
@RestController //스프링은 @Controller, @RestController가 있어야 스프링 컨트롤러로 인식
public interface OrderControllerV1 {}
참고로 이후에 학습할 OrderControllerV2도 다음과 같이 @RestController를 사용해야 한다. (바로 다음장에 설명한다.)
@RestController
public class OrderControllerV2 {}추가로 ProxyApplication도 다음과 같이 변경하자.
ProxyApplication - 스프링 부트 3.0 미만
@Import(AppV1Config.class)
@SpringBootApplication(scanBasePackages = "hello.proxy.app") //주의
public class ProxyApplication {}
ProxyApplication - 스프링 부트 3.0 이상
@Import(AppV1Config.class)
@SpringBootApplication(scanBasePackages = "hello.proxy.app.v3") //주의
public class ProxyApplication {}scanBasePackages 부분에서 마지막에 v3가 붙었다. hello.proxy.app -> hello.proxy.app.v3
이렇게 하는 이유는 스프링 부트 3.0부터는 @Controller, @RestController를 사용했는데, 이렇게 하면 내부에 @Component를 가지고 있어서 컴포넌트 스캔의 대상이 된다. 지금 처럼 컴포넌트 스캔도 되고, 빈도 수동으로 직접 등록하게 되면 스프링 컨테이너에 등록시 충돌 오류가 발생한다. 이후에 학습할 hello.proxy.app.v3는 빈을 직접 등록하지 않고 컴포넌트 스캔을 사용하기 때문에 괜찮다.
2
혹시 Spring Boot 버전이 3.0 이상이실까요? 만약 맞다면 버전 다운그레이드 해보시면 좋을 것 같습니다.
0
https://github.com/spring-projects/spring-framework/commit/3600644ed1776dce35c4a42d74799a90b90e359e
위의 커밋 보시면 isHandler 메서드에서 더이상 RequestMapping을 핸들러로 인식하지 않기 때문에 위와같은 문제가 발생합니다
어드바이스 순서 디폴트 기준이 궁금합니다.
0
51
1
AspectV1 예제를 @Configuration 수동 등록으로도 가능한가요?
0
78
2
구체 클래스를 상속받아 확장한 형태도 클래스패턴/데코레이터 패턴이라고 칭하나요?
0
52
1
TraceTemplate 을 미리 빈으로 등록해서 사용할때 이렇게 설정하는게 맞는건가요?
0
53
1
Decorator 에서 추상메서드로 뺄때 질문 있습니다.
0
56
1
대상 클래스에 기본 생성자가 없을 때
0
74
1
스프링 부트 버전 4.0 aop 의존성 명칭 변경
1
346
2
final 키워드 사용 관련 질문
0
75
1
안녕하세요
0
64
1
ThradLocal 실무 사례
0
97
2
실무에서의 동시성 문제
0
62
1
로그 등 부가 기능에 대한 테스트코드
0
50
1
ProceedingJoinPoint와 MethodInvocation에 대하여
0
67
1
실무 멀티스레딩에 대한 궁금증
0
69
1
안녕하세요 질문있습니다
0
43
1
AspectV3 aop 실행 순서 문의 드립니다
0
37
1
MDC vs AOP 중에 고민중입니다.
0
74
1
순환참조
0
158
2
this를 단독으로 사용할때랑 파라미터 바인딩 할때 차이
0
77
1
빈 후처리에 등록 질문 있습니다.
0
75
1
AppConfig 설정하는 설명중에 이해가 안되는게 있습니다.
0
88
1
ThreadLocal을 지역변수로 선언하면 remove가 필요할까요?
0
117
2
@Aspect 어노테이션으로 생성된 Advisor의 Bean 저장 여부
0
67
1
ThreadLocal 사용시 부작용이 있을수 있을까요? (ThreadLocal.remove()를 잘한다고 해도..)
0
73
2





