파라미터 인코딩

서린·2024년 1월 17일

혼자개발

목록 보기
20/82

open api의 샘플 코드를 webClient 적용한 형태로 바꾸는 방법을 보던 중
파라미터 인코딩을 하는 과정이 있어서 자세히 알아보고싶었다.

인코딩이란??
어떤 정보를 특수한 목적을 가지고 다른 형태로 변환하는 행위

webClient를 사용해서 외부 api를 호출 할 때에 인코딩 하지 않고 그냥 호출하게 되면 api 키가 달라지는 경우가 생길 수 있다고 한다
WebClient의 인코딩 방식은 UriComponentsBuilder#encode()라는 옵션을 사용하여 url의 예약 문자들을 치환하는 방식인데, 이 방식으로 인해 키 값이 달라지면서 문제가 발생하는 것

그 경우를 해결하기 위해서는

  1. UriBuild 설정을 해주는 DefaultUriBuilderFactory Class의 인스턴스를 생성해준다
DefaultUriBuilderFactory factory = new
DefaultUriBuilderFactory(BASE_URL);

그 다음엔 해당 인스턴스를 활용해서 인코딩 Mode를 설정한다

factory.setEncodingMode(DefaultUriBuilderFactory.EndingMode.VALUES_ONLY);

  1. url에 인코딩을 적용하지 않는다(api의 인증키를 queryParam으로 받는 api를 호출 시)
    DefaultUriBuilderFactory 객체를 생성하여 인코딩 모드를 None으로 변경하고 WebClient에 적용시킨다.
DefaultUriBuilderFactory factory = new DefaultUriBuilderFactory();
factory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE);

인코딩 모드 종류들

  • TEMPLATE_AND_VALUES: URI 템플릿을 먼저 인코딩하고 URI 변수를 적용할 때 인코딩한다
  • VALUES_ONLY: URI 템플릿을 인코딩하지 않고 URI 변수를 템플릿에 적용하기 전에 엄격히 인코딩한다
  • URI_COMPONENT: URI 변수를 적용한 후에 URI 컴포넌트를 인코딩한다
  • NONE: 인코딩을 적용하지 않는다

uri의 빌드 설정을 완료했다면 webClient의 인스턴스를 생성할 때 그 UriBuilder로 uri를 만든다고 설정하기

WebClient wc = 
WebClient.builder().uriBuilderFactory(factory).baseUrl(BASE_URL).build();

0개의 댓글