300x250
반응형
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;
}
}
출처 : https://koharinn.tistory.com/583
300x250
반응형
'Back-End > Spring' 카테고리의 다른 글
[Spring Boot] Spring Boot + Jasper + MySQL 데이터베이스 예제 (0) | 2023.02.09 |
---|---|
[Spring Boot] Spring Boot + Jasper Report Example (0) | 2023.02.09 |
[Spring Security] 비밀번호 암호화 PasswordEncoder (0) | 2023.02.09 |
[QueryDSL]Spring data JPA 와 Querydsl 페이징 연동 (0) | 2023.02.09 |
[QueryDSL]나만 어려운 검색, 페이징 QueryDSL로 해결하기 (0) | 2023.02.09 |