- Spring HashMap 변환 에러 -


ajax를 사용하는 도중에 아래와 같은 에러가 발생하였다.

 

"No converter found for return value of type: class java.util.HashMap"

 

"No converter found for return value of type:"  HashMap 뿐만아니라 다른것들 역시 발생할 수 있다.

이 에러는 ajax 통신 과정에서 에러에 표시된 (본문에서는 HashMap) 타입이 json으로 변환시키지 못했다는 에러이다.

 

하지만 아이러니 하게도 국비지원 교육을 받았을 당시 "jackson-core" 라이브러리 하나만으로도 충분히 자동 변환이 되었던 코드인데 다시 해보려니 안되는 현상이였다.

 

에러가 발생한 코드 현황은 다음과 같다.

 

- pom.xml

<!-- jackson -->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-core</artifactId>
	<version>2.9.2</version>
</dependency>

- mineMain.jsp

$("#loginBtn").click(function(){
    var loginId = $("#id").val();
    var loginPw = $("#pw").val();
    $.ajax({
        type:"post",
        url:"/mLogin",
        data:{
            id : loginId,
            pw : loginPw
        },
        dataType : "JSON",
        success:function(data){
            console.log(data);
            alert("환영합니다.");
        },
        error:function(e){        
            console.log(e);
            alert("로그인에 실패하셨습니다.");
        }
    });
});

- MineTestController.java

@RequestMapping(value = "/mLogin", method = RequestMethod.POST)
    public @ResponseBody Map<String,Integer> mLogin(Member member) {
        System.out.println("mLoginCall");
        
        Map<String,Integer> rMap = mm.mLogin(member);
        
        return rMap; //map으로 넘겨도 jackson이 자동으로 JSON 타입으로 변환해서 넘겨줌.
        //jackson은 gson처럼 객체화필요없음 그냥 @ResponseBody와 같이 사용
    }

위 상황에서 jackson 관련 라이브러리를 하나 더 추가하여 해결하였다.

 

- pom.xml

<!-- jackson-core -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.2</version>
</dependency>

그냥 두개 다 선언해주고 시작해는게 마음 편하다.

반응형