[Spring] AJAX/JSON으로 이메일 중복 확인

Posted by 신희준 on December 3, 2017



2017 - 12 - 03 (일)


이메일 중복 여부 확인하기


1 . 이메일 중복확인 버튼을 클릭할 때 ajax 로 /user/authenticate 컨트롤러에 json 형식의 데이터를 보낸다. (email 값)

<script>
$(document).on('click','#authenticate',function(){
	var email = $('#email').val()
    $.ajax({
        url:'/user/authenticate',
        type:'POST',
        data: {'email' : email},
        contentType: "application/x-www-form-urlencoded; charset=UTF-8",
        dataType : "json",

        success:function(data){
            console.log("success")
            alert(decodeURIComponent(data.msg))


        },
        error: function (XMLHttpRequest, textStatus, errorThrown){

        	alert('서버와의 통신이 원할하지 않습니다.\n다시 시도 해 주십시오.' );
        	}
    });
});
</script>

2 . 컨트롤러는 email 값을 받아 db에서 email 값이 있는지 확인하고 있을 경우 F 로 사용불가를 전달 , Email 값이 없을 경우 T로 사용가능을 표시해준다. 이 때 중요한 부분이 [ produces = “application/json; charset=utf-8” ] 이 부분이다. 이 설정을 넣어주지 않으면 front 단에서 한글을 인식하지 못한다. ( JSON 데이터 처리를위해 pom.xml 에 Jackson-databind 추가 필요 )

@Responsebody 애너테이션을 붙이면 JSON 데이터를 처리한다. @RequestParam 으로 “email” 키에 있는 email 값을 String 변수 email 에 주입해준다.

@RequestMapping(value = "/authenticate" , method = RequestMethod.POST, produces = "application/json; charset=utf-8")
public @ResponseBody String checkDuplicate(HttpServletResponse response,  @RequestParam("email") String email, Model model)throws Exception {

  String msg = service.authenticate(email);
  System.out.println(msg);
  String responseMsg;


  if(msg == "T") {
        responseMsg = "{\"msg\":\""+"사용가능한 이메일 입니다."+"\"}";
  }else {
    responseMsg = "{\"msg\":\""+"사용이 불가한 이메일 입니다."+"\"}";
  }


   URLEncoder.encode(responseMsg , "UTF-8");


//		model.addAttribute("msg", service.authenticate(email));
  System.out.println(email);
  return responseMsg;

}

3 . serviceImpl

@Override
public String authenticate(String str) throws Exception {
  // TODO Auto-generated method stub
  System.out.println("인증 중");
  if(dao.authenticate(str) ==null) {
    return "T";
  }else {
    return "F";
  }


}

4 . DAOImpl

@Override
public UserVO authenticate(String str) throws Exception {
  // TODO Auto-generated method stub
  System.out.println("dao");
  return sqlSession.selectOne(namespace+".checkdupl", str);
}

5 . mapper

<select id = "checkdupl" resultType = "UserVO">
select user_id from USER where user_email = #{user_email}
</select>