에러해결
[에러해결]java.lang.IllegalArgumentException: No converter found for return value of type: class java.lang.Integer
intp프로그래머
2023. 1. 19. 13:58
아이디 중복 확인 체크 기능을 ajax로 구현하던 중 발생한 에러이다.
아래 4단계를 거쳐 해결이 되었다.
1. pom.xml에 jackson-databind 과 jackson-core 추가.
(에러 발생시 : 프로젝트 우클릭 - Maven - Add Dependency - jackson 검색해서 아래 2개 생성해줘야 버전이 알맞게 들어가는 것 같다. 정 없다면 아예 jar 파일을 추가해줘야 하지싶다. )
<!-- JSON관련 lib -->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.13.3</version>
</dependency>
2. dispatcher-servlet.xml에 아래 코드 추가(효과가 있는진 모르겠는데 구글링 해보니 converter를 추가해서 해결하는 경우가 많더라.)
<!-- @ResponseBody 및 json converter 관련 에러 -->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
3. 관련 ajax 부분 코드에 datatype: 'json' , 추가
$(document).ready(function() {
//회원가입시 아이디 중복 검사
$(".id_confirm").on("focusout", function checkId() {
var inputed = $('#id').val(); // id값으로 'id'를 가진 'input에 입력한 값'
console.log(inputed);
$.ajax({
data : {
id : inputed //입력한 값을 id라는 변수에 담음
},
datatype: 'json',
url : "/checkid", // data를 checkid url에 보냄 (Controller에서 받아서 처리. 중복이 되면 1, 아니면 0을 반환하는 함수를 구현했다.)
method:'post',
success : function(result) {
if(result == "1") { //아이디가 중복되었을 때
//아이디가 중복되었을 때 기능처리
// alert("이미 존재하는 아이디 입니다.");
$('#id_div').html('<a style="color: red;">사용 불가능한 아이디 입니다.</a>');
// id_overlap_input.focus();
return f;
} else if (result == "-1") {
alert('아이디를 입력해주세요.')
return;
} else {
$('#id_div').html('<a">사용 가능한 아이디 입니다.</a>');
// $('.username_input').attr("check_result", "success");
// $('#id_check_sucess').show();
// $('.id_overlap_button').hide();
return;
}
},
error:function(xhr, error, stauts){
console.log(xhr);
console.log(error);
console.log(status);
}
})
});
});
4. converter.StringHttpMessageConverter 가 String값만 처리하고 int는 처리를 못한다는 글을 보고 원래 int 형이었던 result 값을 String으로 바꿔주기 위해 mapper의 mysql쿼리에서부터 count(*) 를 varchar로 형변환해주고, Controller.java, Service.java, ServiceImpl.java, Mapper.java 에서도 각 메서드 및 return 값을 int 형에서 String 형으로 변경해주었다.
<select id="checkId" parameterType = "String" resultType = "String">
SELECT cast(COUNT(*) AS VARCHAR(10)) cnt FROM tbl_member WHERE id = #{id}
</select>