Dart - flutter http요청 request에 string이 아니면 안보내질때

guddls ju·2023년 11월 15일
0

JS를 사용하는 React Native로 개발을 하다가
Dart로 flutter 개발을 하면서 겪었던 문제중 하나는
api요청을 보낼 때 body값에 int가 들어가면 오류가 났던 것이다.
정확히는 int 뿐 아니라 String이 아니면 오류가 났다.

type 'int' is not a subtype of type 'String' in type cast

그 이유는 서버로 요청을 보낼 때 body에는 문자열 혹은 formData 형식으로 들어가야하는데 Dart객체로 보내고 있었다.
그래서 문자열이 아닌 값이 들어가면 오류가 났던 것이다.

그리고서는 오류를 해결하기 위해서 toString을 사용해서 아래처럼 보내고 있었다.(똥코드)

 body: {
       'keyword': keyword,
        'page': page.toString(),
        'location': sigunguCode.toString(),
      },

임시방편으로는 이런식으로 서버와 통신이 가능하지만 결국 서버에서 받아서 다시 바꿔서 사용해야하는 거지같은 코드다...




해결 방법은 생각보다 간단했다!

Dart객체를 Json문자열로 인코딩해서 보낸다.

예를 들면 이런식으로 Dart객체를 Json문자열로 인코딩해서 content type이 json이라고 헤더에 담아주면서 바디에는 인코딩한 문자열을 넣어주면 된다.

   dynamic body = {
      'contentno': contentno,
      'boardtime': boardtime,
      'liketype': liketype,
    };
    
    body = jsonEncode(body);
    
    http.post(
       Uri.parse('${Config().getServer()}/test'),
      headers: {"Content-Type": "application/json"},
      body: body,
    );

좀더 간단하게 쓰면

 body: json.encode({
        'keyword': keyword,
        'page': page,
        'location': location,
      }),


이렇게 간단한것을 int를 string으로 바꿔보내고 다시 int로 바꿔서 사용하는 바보같은 짓을 하고있었다.(물론 서버가 node라 알아서 잘 받아지긴 했다.)

조금만 찾아보면 되는것을 순간 돌아가긴 한다는생각에... 똥코드를 싸버렸다ㅠ

오늘의 포스팅은 정보보다는 나의 태도를 돌아보는 용도로 쓴다,,,

profile
효율에 미친자

0개의 댓글