Exception: FormatException: Unexpected character (at character 1)
로그인 기능 테스트 중 스프링부트에서 처리 후 "로그인 성공" 및 "로그인 실패" 문자열을 응답으로 보내려고 시도했다. 하지만 플러터에서 FormatException이 발생을 했는데 검색해보니 스프링에서 return "로그인 성공" 이런식으로 보내게 되면 그냥 String의 형태로 반환하는거라 json.decode 를 하게 되면 예외가 발생하는 것이었다.
해결 방법은 여러가지가 있는데 나의경우,
return "문자열" 방식을 사용하고싶어 그냥 플러터에서 response.body를 변수에 담아 출력했다.
stackoverflow에서는 var pdfText= await json.decode(json.encode(response.databody);
이런식으로 encode와 decode를 동시해 해주는 방법을 알려주고있다.
만약 json형식으로 데이터를 반환해야 한다면 @RestController나 @ResponseBody를 사용하면 된다.
하지만 이 경우 문자열을 그냥 return 하면 되는거 아닌가? 생각할 수 있는데, 스프링부트에서 문자열을 http 응답으로 보내긴 하지만 응답이 json인지 명시적으로 알려주지 않기 때문에 반환된 데이터를 json이 아닌 일반 문자열로 인식한다고 한다.
따라서 문자열을 return 할 때 json 형태의 문자열을 반환해주면 되는데,
그러면 최종적으로는
return "{\"message\": \"로그인 성공\"}";
이런 형식이 된다.