728x90
반응형
😢 서론
KakaoPay API 통신을 feign client를 통해 진행하는 중
POST로 form-urlencoded 타입으로 전송해야 하는데,
@JsonNaming 애노테이션이 form-urlencoded 타입에서는 정상적으로 작동하지 않아 해결한 내용을 정리해봅니다.. ㅜ
이 글은, feign Client를 통해 요청을 보내는 방법을 정리합니다.
본인의 서버 컨트롤러로 받는 방법으로는 여기 에서 많은 해결책이 나와있습니다. 참고 바랍니다!!
🫢 본론
FeignClient
@FeignClient(name = "kakaoPay", url = "https://kapi.kakao.com/v1", path = "/payment", configuration = CoreFeignConfiguration.class)
public interface KakaoPayClient {
@RequestMapping(value = "/ready", method = POST,
consumes = APPLICATION_FORM_URLENCODED_VALUE)
@Headers("Content-Type: application/x-www-form-urlencoded;charset=utf-8")
KakaoPayReadyResponse ready(@RequestHeader(value = "Authorization") String authorization, KakaoPayReadyRequest request);
}
기존 방식
@JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class)
@JsonInclude(Include.NON_NULL)
public class SnakeCaseStrategy {
}
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class KakaoPayReadyRequest extends SnakeCaseStrategy {
// 가맹점 코드
@NotEmpty
private String cid = "TC0ONETIME";
// 가맹점 코드 인증키
private String cidSecret;
...
}
KakaoPayReadyRequest 객체를 통해 전송할 때 @JsonNaming을 사용해서 보내려 했지만 변경이 안됐습니다.
Json 타입으로 보낼 때에만 정상적으로 작동하더군요..
그래서 열심히 찾아본 결과 해결책은 아래와 같습니다.
이렇게 하면 됩니다.
public class CoreFeignConfiguration {
...
@Bean
Encoder formEncoder() {
return new feign.form.FormEncoder();
}
}
public class KakaoPayReadyRequest {
// 가맹점 코드
@NotEmpty
private String cid = "TC0ONETIME";
// 가맹점 코드 인증키
@feign.form.FormProperty("cid_secret")
private String cidSecret;
// 가맹점 주문번호
@NotEmpty
@feign.form.FormProperty("partner_order_id")
private String partnerOrderId;
...
}
Feign Client에서 사용하는 Configuration에 formEncoder() 메서드를 빈으로 등록 후에
@feign. form.FormProperty("...")를 모든 프로퍼티에 붙여 변경하는 방법을 취했습니다.
이 방법은 프로퍼티 별로 다 붙여줘야되는 단점이 있긴 하지만,
현재 제가 찾아본 다른 방법으로는 별도로 설정을 추가한다던지, 객체가 아닌 단일 프로퍼티로 전송한다던지 등
현재 방법이 그나마 제일 깔끔하다고 느꼈습니다.
🫣 결론
혹시 더 나은 방법을 알고 계신 분이 계시다면.. 댓글로 알려주시면 감사하겠습니다!!
언제나 피드백은 환영입니다!!
참고
728x90
반응형