본문 바로가기
Back-End/Spring

ajax 통신시 URI로 이메일 문자열 보낼시 dot(.) 이하문자삭제 문제

by 어렵다어려웡 2021. 3. 25.

바쁘신분들을 위한 문제 해결방법

 

// PathVariable로 받는 변수 뒤에 :.+ 를 붙인다.
@GetMapping(value = "/signUp/email/{email:.+}")

 

회원가입 기능 중 이메일 중복확인 기능을 추가하였으며 

중복확인을 위해서 데이터통신을 위해 ResponseBody를 선언하여

확인 후 존재여부 결과를 보내주는 처리과정을 설계하고 진행했습니다.

 

하지만 클라이언트에서 이메일 형식의 문자열을 보낼 경우 2가지 상황에서의 문제가 발생했다.

1. produces 설정

@GetMapping(value = "/signUp/email/{email}", produces = MediaType.TEXT_PLAIN_VALUE)
@ResponseBody
public ResponseEntity<String> isExistEmail(@PathVariable("email") String email)

produces는 Accept의 헤더를 참고하는 속성인데.. 개발자도구를 보면 Accept: */* 로 나타나고있었다..

사실 Accept의 헤더라는게 Accept 속성을 의미하는지는 좀 더 알아봐야 한다..

아무튼 해당 메서드를 통해서 호출할 경우 406에러가 지속적으로 발생한다.

 

2. produces 미설정.

produces 값에 정확하게 어떤 타입을 넣어야 할지에 대한 확신이 없어 우선 produces 속성을 뺀 채로

테스트를 진행해보았습니다. 

@GetMapping(value = "/signUp/email/{email}")
@ResponseBody
public ResponseEntity<String> isExistEmail(@PathVariable("email") String email)

 

이메일 형식의 문자열을 uri로 보내자 dot (.) 이후 문자를 제외한 문자열이 들어왔습니다.

 

구글링을 해봤지만 지속적으로 해결이 어려워지자 도움글도 써보고 했는데

댓글은 달렸지만 해결이 안돼서 혹시하는 마음에 

오늘 구글링을 좀 더 간단하게 해보니까 바로 해결법이 나왔습니다..

 

아래처럼 URI를 입력하는 공간뒷쪽에 " :.+ " 를 붙여서 설정을 하니 정상적으로 전체 이메일 문자열이 들어왔습니다.

	@GetMapping(value = "/signUp/email/{email:.+}")
	@ResponseBody
	public ResponseEntity<String> isExistEmail(@PathVariable("email") String email) {