안드로이드

안드로이드 Volley Http 스프링과 통신할 때 한글 물음표로 ??? 로 올 때 해결방법

알통몬_ 2018. 4. 6. 15:46
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


이번 포스팅에서는 Charset Encoding에 관련한 포스팅입니다.


Volley 로 회원가입 JsonObjectRequest 를보내고 


Spring으로 부터 JSONObject를 Response로 받는 예제를 돌려보던 중


스프링에서 System.out.println()으로 찍어봤을 때는 한글이 잘 나오는데


안드로이드에서 받은 값을 Log에 찍어보니 

한글이 물음표 ???로 나오는 문제를 발견했습니다.


그래서 거의 하루 종일 구글링을 했었는데요.


몇몇 글에서 Volley는 한글을 지원하지 않는다고 해서 Volley 문제인지 알고

Volley + ??? 를 합한 검색만 하다 보니 잘 안 나왔습니다.


근데!!! 문제는 Volley가 아니었습니다...

Volley에서는 한글을 지원합니다. 

왜 안된다는 글이 많은 건지는 모르겠지만;;;


해결 방법은 정말 정말 간단했습니다.

제가 스프링에서 값을 받아 아래와 같이 반환을 해주었는데요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@RequestMapping(value = "/login", method = RequestMethod.POST)
    public String login(HttpServletRequest request) {
        commonMethod = new CommonMethod();
        JSONObject response = commonMethod.stringParseToJSON(request);
        JSONObject users = new JSONObject();
        try {
            request.setCharacterEncoding("UTF8");
            String email = response.get("email").toString();
            String password = response.get("password").toString();
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            User user = userDao.loginDao(email);
            String hashed = user.getPassword();
            if (hashed == null)
                users.put("email", user.getEmail());
            else {
                boolean isSame = BCrypt.checkpw(password, hashed);
                if (isSame) {
                    users.put("email", user.getEmail());
                    users.put("nickname", user.getNickname());
                    users.put("birth", user.getBirth());
                    users.put("phone", user.getPhone());
                    users.put("gender", user.getGender());
                    users.put("profile_url", user.getProfile_url());
                    users.put("join_date"String.valueOf(user.getJoin_date()));
                } else
                    users.put("email", user.getEmail());
            }
        } catch (Exception e) {
 
        }
        return users.toJSONString();
    }
cs

@RequestMapping에 인자를 하나만 더 넣어주면 깔끔하게

한글을 잘 보냅니다.

1
@RequestMapping(value = "/login", method = RequestMethod.POST)
cs

이거에서

1
@RequestMapping(value = "/login", method = RequestMethod.POST, produces = "text/plain;charset=UTF-8")
cs

이걸로

produces = "text/plain;charset=UTF-8"

을 추가 해주시면 됩니다.


역시 모를 땐 한 없이 답답하지만 알고나면 너무 간단하네요 ㅋㅋㅋ

이상

안드로이드 Volley Http 스프링과 통신할 때 

한글 물음표로 ??? 로 올 때 해결방법에 대해 알아보았습니다.

감사합니다.


반응형