본문 바로가기

오류

[SpringBoot] gson 추가 후 오류 + 해결

build.gradle에 

implementation 'com.google.code.gson:gson:2.8.5';

추가 후, 로그인 할 때 오류 발생

 

로그인 후 dto를 생성해서 json형식으로 반환하는 builder에서 오류가 발생한 것으로 보인다.

해당 서비스 위에

@EnableAutoConfiguration(exclude = {org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration.class})

설정을 해주니 잘 작동하나했지만.. 이걸 해주면 gson을 사용하던 컨트롤러가 잘 작동되지않는다.

gson을 사용하면 순서가 유지된다는 장점이 있지만, 우리 프로젝트에서는 그렇게 중요하지않아서 

 

implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'

gson말고 json-simple으로 사용하는걸로 바꿨다. 

추가로 json을 사용해도 데이터를 넘길 때 JSONObject가 아닌 SortedMap을 사용하면 gson을 사용하지 않아도 순서가 보장된다.

 

    public JSONObject matchDetailInfo(String matchId) throws IOException, ParseException {

        CloseableHttpClient client = HttpClientBuilder.create().build();
        HttpGet request = new HttpGet("https://asia.api.riotgames.com/lol/match/v5/matches/" + matchId + "?api_key=" + mykey);
        HttpResponse response = (HttpResponse) client.execute(request);
        HttpEntity entity = response.getEntity();
        String matchInfo = EntityUtils.toString(entity);

        JSONParser parser = new JSONParser();
        Object obj = parser.parse(matchInfo);
        JSONObject jsonObj = (JSONObject) obj;

//        JSONObject jso = (JSONObject) jsonObj.get("metadata");

        JSONObject info = (JSONObject) jsonObj.get("info");
        JSONArray participants = (JSONArray) info.get("participants");

        JSONObject jsonObject = new JSONObject();
        JSONArray jsonArray = new JSONArray();
        jsonObject.put("gameMode", info.get("gameMode"));
        jsonObject.put("gameDuration", info.get("gameDuration"));

        for (int i = 0; i < participants.size(); i++) {
            JSONObject participant = (JSONObject) participants.get(i);
            JSONObject data = new JSONObject();
            data.put("summonerName", participant.get("summonerName"));
            data.put("championName", participant.get("championName"));
            data.put("individualPosition", participant.get("individualPosition"));
            data.put("champLevel", participant.get("champLevel"));
            data.put("kills", participant.get("kills"));
            data.put("deaths", participant.get("deaths"));
            data.put("assists", participant.get("assists"));
            data.put("totalDamageDealtToChampions", participant.get("totalDamageDealtToChampions"));
            data.put("totalDamageTaken", participant.get("totalDamageTaken"));
            data.put("goldEarned", participant.get("goldEarned"));
            data.put("item0", participant.get("item0"));
            data.put("item1", participant.get("item1"));
            data.put("item2", participant.get("item2"));
            data.put("item3", participant.get("item3"));
            data.put("item4", participant.get("item4"));
            data.put("item5", participant.get("item5"));
            data.put("item6", participant.get("item6"));
            data.put("wardsPlaced", participant.get("wardsPlaced"));
            data.put("wardsKilled", participant.get("wardsKilled"));
            jsonArray.add(data);
        }
        System.out.println(jsonArray);
        jsonObject.put("users", jsonArray);
        return jsonObject;
    }

 

이제 다른 컨트롤러도 지장없이 사용할 수 있다.