json을 주고받는 RestAPI 방식이 아직 약하다. 오늘도 생각보다? 애를 꽤 많이 먹었다.
대충 말하자면
1. jackson-databind-xml 태그를 pom.xml에 붙여놓고 잊어버려서 json값이 오는데 아니라 xml로 값이 왔었다.
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.5</version>
</dependency> => 요 설정 때문에
값이 아래처럼 나왔다.
<Integer>0</Integer>
*팁: 원하는 json으로 안 오는 거 같으면 GetMapping해서 경로로 값을 호출해보라.
(@ResponseBody 식이다. 또는 @RestController도 방법이란다.)
xml의 경우 대놓고 xml이라고 문구 나오고 그런 식이다.
gson, jackson-databind 태그를 pom.xml에 안해서 @ResponseBody, @RequestBody해도 json값으로 안 넘어왔다.
이메일 중복검사를 할 때 ajax에서 보내준 이메일 값이
컨트롤러에서 아래처럼 @가 인코딩되어서 찍혔다.
이유는 복붙하다가 잘못해서. jsp에서 ajax 보낼때 아래처럼 보내면 발생한다.
$("#validateEmailBtn").click(function () {
//post로 서버단에 ajax로 아이디 값을 전송해서 아이디가 중복인지 확인한다.
$.ajax({
type: 'POST', // 요청 메서드
url: '/member/chkDuplicateEmail', // 요청 URI
headers: {"content-type": "application/json"}, // 요청 헤더
dataType: 'text', // 전송받을 데이터의 타입
data: $("#email").val(), // 서버로 전송할 데이터. stringify()로 직렬화 필요.
//와 진짜 {email: $("#email").val()} 식으로 어디서 본 걸로 긁었더니 안된다.ㅋㅋㅋㅋㅋㅋㅋㅋ 놀랍다. 오늘.
success: function (result) {
console.log("결과: "+ result, typeof result, result == 1, result === 1 );
let msg = "";
if(result == 1) {
msg = "이미 사용중인 이메일입니다.";
}else msg ="사용가능한 이메일입니다.";
alert(msg); // result는 서버가 전송한 데이터
},
error: function () {
alert("error")
} // 에러가 발생했을 때, 호출될 함수
}); // $.ajax()
});
{email: $("#email").val()}하는 실수는 하지 말자.
테스트를 해보려는데 느닷없이 또 passwordEncoder, 시큐리티 쪽 설정에서 빈을 못찾는 에러가 났다.
https://okky.kr/articles/830075
그냥 이 사이트처럼 security-context.xml에 있던 아래 코드를
root-context.xml에도 추가했다. 그랬더니 다시 돌아갔다.