@ResponseBody가 붙은 경우 리턴 타입에 상관없이 모두 문자열로 해석한다.

김학준·2024년 6월 17일
0

게시판

목록 보기
41/44

문제 상황

다음은 read.jsp에서 좋아요 또는 싫어요 버튼을 누른 후 실행되는 성공 콜백 함수이다.

// 결과 성공 콜백함수
success : function(result) {
	// console.log(typeof result);
	if (result === 1 && isLike === 'Y') {
		$('a#cThumbsUpAnchor').addClass('active');
		$('a#cThumbsDownAnchor').removeClass('active');
	} else if (result === 1 && isLike === 'N') {
		$('a#cThumbsUpAnchor').removeClass('active');
		$('a#cThumbsDownAnchor').addClass('active');
	} else if (result === 2) {
		$('a#cThumbsUpAnchor').removeClass('active');
		$('a#cThumbsDownAnchor').removeClass('active');
	}
},

위의 if-else-if문 중 어떤 블록도 수행되지 않음을 확인할 수 있었다. RestNoticeControllervote()의 리턴 타입은 int지만 HTTP 메시지 컨버터를 통해 String으로 변환된다. 값 뿐만 아니라 타입까지 확인하는 === 연산의 결과가 false였기 때문에 어떤 블록도 수행되지 않은 것이다.

해결 방법

// 결과 성공 콜백함수
success : function(result) {
	// console.log(typeof result);
	if (result === '1' && isLike === 'Y') {
		$('a#cThumbsUpAnchor').addClass('active');
		$('a#cThumbsDownAnchor').removeClass('active');
	} else if (result === '1' && isLike === 'N') {
		$('a#cThumbsUpAnchor').removeClass('active');
		$('a#cThumbsDownAnchor').addClass('active');
	} else if (result === '2') {
		$('a#cThumbsUpAnchor').removeClass('active');
		$('a#cThumbsDownAnchor').removeClass('active');
	}
},

위와 같이 문자열 타입을 비교하도록 변경해주었다.

0개의 댓글