spring 프로젝트에서 웹 view를 사용하지 않는 경우에는 @ResponseBody annotation을 사용해서 응답을 클라이언트에 반환한다.
이때 spring에서는 제대로 한글 보내는데 안드로이드에서는 한글이 ??? 으로 처리되는 경우가 발생한다.
(spring에서 인코딩도 모두 UTF-8로 설정해줬다.)
처음에는 안드로이드 쪽 인코딩 처리가 문제인 줄 알았는데 서버에서 보낸 문자열 자체를 ???으로 받았다.
서버에서 응답을 보낼 때 UTF-8 처리를 해야 할 것 같아서 열심히 찾아봤는데 역시 서버에서 인코딩 처리를 해야 했다.
(전에 다른 부분 구현하면서 알게 됐는데 까먹었...😅)
// get my nickname
@GetMapping(value="review/myNickname")
public String getMyId(@RequestHeader String token) {
System.out.println("[+] Get my nickname from Android");
System.out.println("[+] token: " + token);
// token 유효성 검증
if(jwtService.checkTokenExp(token)) {
// token에서 사용자 id 가져오기
String userId = jwtService.getClaim(token).get("id").toString();
System.out.println("[+] userId from token: " + userId);
String userNickname = repository.findById(userId).get().getNickname();
System.out.println("[+] userNickname: " + userNickname);
return userNickname;
}else {
System.out.println("[-] Invalid token");
return null;
}
}
안드로이드에서 필요한 닉네임을 가져오기 위해 서버에서 처리 후 응답을 보내는 코드이다.
view를 반환하지 않기 때문에 리턴값에 @ResponseBody을 사용하는데
여기서 @RestController를 사용했기 때문에 따로 @ResponseBody를 따로 명시하지 않았다.
@GetMapping annotation에서 produces 옵션으로 Content-Type을 지정할 수 있다. 여기에서 인코딩을 UTF-8로 설정해서 한글 깨짐을 해결했다.
// get my nickname
@GetMapping(value="review/myNickname", produces="application/json; charset=utf8")
public String getMyId(@RequestHeader String token) {
System.out.println("[+] Get my nickname from Android");
System.out.println("[+] token: " + token);
// token 유효성 검증
if(jwtService.checkTokenExp(token)) {
// token에서 사용자 id 가져오기
String userId = jwtService.getClaim(token).get("id").toString();
System.out.println("[+] userId from token: " + userId);
String userNickname = repository.findById(userId).get().getNickname();
System.out.println("[+] userNickname: " + userNickname);
return userNickname;
}else {
System.out.println("[-] Invalid token");
return null;
}
}
한글 깨짐이 해결된 걸 확인할 수 있다.
[Spring] JWT Token 사용하기 (0) | 2022.02.27 |
---|---|
[Spring] 테스트 코드 작성 (0) | 2022.02.24 |
JWT (JSON Web Token) (0) | 2022.01.28 |
[Spring] Android, Spring 연동 (retrofit2) (1) | 2022.01.24 |
[Spring] Spring, MongoDB 연동 (Spring Data MongoDB) (0) | 2022.01.20 |