ahnnyung ,/Java

[BufferedReader] BufferedReader.readLine()로 Json 데이터를 읽어올 때 주의할 점

hi,ho 2020. 11. 20. 18:13
반응형

코드 중 일부

팀원이 작성한 코드 중 문제가 있다는 팀장님의 말씀.

옆으로 쫄래쫄래 다가가 같이 코드를 보아도 여전히 문제를 모르겠다.

 

결과는 이렇다.

Token을 발급해주는 서버로부터 받는 포맷은 다음과 같은 Json형태이다.

① 현재 tokenbufferedReader로 읽혀지는 형태

이 형태일때는 tokenbufferedReader.readLine()으로 한 줄을 받아, ObjectMapper를 이용하여 TokenVo를 만들어도 문제가 되지않는다.

 

하지만 Token을 발급해주는 서버가 너무나도 친절하여 굳이 다음과 같이 Json포매팅으로 변경해서 보내준다면??

② 만약 이런 형태로 전달된다면?

tokenbufferedReader.readLine()으로 한 줄을 받는 순간 "{" 만 덜렁 받아지게되는 문제가 발생한다. 따라서 다음과 같은 (정답은 아니지만) 일종의 안전장치를 달아주는 게 좋다.

StringBuilder sb = new StringBuilder();
String inputLine; // 라인 별 입력받아지는 String

while((inputLine = tokenbufferedReader.readLine()) != null) {
	sb.append(inputLine); // 각 라인 별 입력받아진 String들을 하나의 String으로 만들기 위해 sb에 담아준다.
}

그 뒤, ObjectMapper.readValue()의 parameter로 sb을 String으로 변환하여 넣어준다면 어떠한 형식의 Json이어도 문제없이 받아낼 수 있게 된다.

 

StringBuilder를 이용한 안전장치를 적용한 코드

 

반응형