hoon's bLog

Spring Error | org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration: Invocation of init method fa.. 본문

IT/Error

Spring Error | org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration: Invocation of init method fa..

개발한기발자 2023. 2. 3. 19:13
반응형

Error 발생 경로

Spring Build 후 기동 중에, 다음과 같은 Error가 발생!!

org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'requestMappingHandlerMapping' defined in org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'WeatherController' method...생략...to {[/weather/district], methods=[GET]}: There is already 'ApiController' bean method...생략...

 

Error 발생 코드

@RequestMapping(value = {"/district/list"}, method = {RequestMethod.GET}, produces = Constants.PRODUCES_JSON)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public void listDistrictInfo (
        @RequestHeader(value="svcInfo"  , required=true) final String svcInfo,
        @RequestHeader(value="authToken", required=true) final String authToken
) {

    //-- Phase01 : Get Request-Data
    //
    Map<String, Object> paramMap = getRequestParameterInfo();
    //
    paramMap = Common.mergeMapInfo(paramMap, request);


    //-- Phase02 : Write Api-Call-Log
    //
    writeApiCallLog(paramMap);


    //-- Phase04 : Call Service Business
    //
    String result;
    //
    try {

        result = weatherService.listWeatherDistrict(paramMap);

    } catch (RuntimeException ex) {

        throw ex;

    }

    //-- Phase05 : Response-Output
    //
    displayResponseData(paramMap, result);

}

@RequestMapping(value = {"/district/list"}, method = {RequestMethod.GET}, produces = Constants.PRODUCES_JSON)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public void viewWeatherInfo (
        @RequestHeader(value="svcInfo"  , required=true) final String svcInfo,
        @RequestHeader(value="authToken", required=true) final String authToken
) {

    //-- Phase01 : Get Request-Data
    //
    Map<String, Object> paramMap = getRequestParameterInfo();
    //
    paramMap = Common.mergeMapInfo(paramMap, request);


    //-- Phase02 : Write Api-Call-Log
    //
    writeApiCallLog(paramMap);


    //-- Phase04 : Call Service Business
    //
    String result;
    //
    try {

        result = weatherService.viewWeatherInfo(paramMap);

    } catch (RuntimeException ex) {
        throw ex;
    }

    //-- Phase05 : Response-Output
    //
    displayResponseData(paramMap, result);

}

 

해결

예외 로그를 자세히 보면 나와있지만, Spring Build 후 기동 시, 특정 맵핑 경로가 중복되어 발생한 Error!!

만약 Spring MVC를 사용한 Web Application 기동시, @RequestMapping URI를 반드시 확인해 봐야 한다!
위 코드에서는 @RequestMapping value의 URI가 /district/list 로 중복되어 위와 같은 Error가 발생했다!

각 경로와 기능에 맞게 URI만 변경해주면 끝!

 

결론

굉장히 기초적인 Error 중에 하나다.

그럼에도, 같은 실수를 반복하는 것을 줄이기 위해 기록하기로 마음먹었다.

연차가 올라갈수록, 이런 사소한 실수는 줄이는게 정신건강에 좋다!! 😅

 

 

참고 : https://zzznara2.tistory.com/422

 

[스프링] java.lang.IllegalStateException: Ambiguous mapping found. Cannot map ‘***Controller’ bean method – 에러 해

java.lang.IllegalStateException: Ambiguous mapping found. Cannot map ‘projectController’ bean method 스프링에서 이런 에러가 난다면.. 해당 **Controller.java 파일의 RequestMapping에 문제가 발생한 겁니다. 저의 경우에는 Re

zzznara2.tistory.com

 

언제나 새로운 정보 공유와 잘못된 정보

비판/지적/태클은 환영입니다!

 

끝:)

728x90
반응형