나에게 메세지 보내기 failed to parse parameter 에러

문의 시, 사용하시는 개발환경과 디벨로퍼스 앱ID를 알려주세요.


안녕하세요 앱 아이디: 1109822 입니다

나에게 메세지 보내기 기능을 테스트 하고 있습니다.

@Slf4j
@RequiredArgsConstructor
@Configuration
public class OpenFeignConfig {

    private final RedisTemplate<String ,String> redisTemplate;


    @Bean
    public RequestInterceptor requestInterceptor() {

        return requestTemplate -> {
            requestTemplate.header("Authorization", redisTemplate.opsForValue().get("kakao_access"));
            requestTemplate.header("Content-Type", "application/x-www-form-urlencoded");
        };
    }

@FeignClient(
        name = "KakaoMessage",
        url = "https://kapi.kakao.com/v2/api/talk/memo/default/send",
        configuration = OpenFeignConfig.class
)
public interface KakaoMessage {

    @PostMapping
    void sendMessage(@RequestBody Object template_object);
}

    @Override
  //  @Scheduled(cron = "0 51 9 * * ?")
    public void messageSetting() {

        MessageDto msg = new MessageDto();
        msg.setMessage("테스트입니다.");
        JSONObject templateObj = new JSONObject();
        templateObj.put("object_type", "text");
        templateObj.put("text", msg.getMessage());
        templateObj.put("link", "www.naver.com");
        templateObj.put("button_title", "test btn");


        MultiValueMap<String, Object> parameters = new LinkedMultiValueMap<>();

        parameters.add("template_object", templateObj.toString());

        log.info("요청 보내기 시작!");
        log.info(parameters.toString());
        kakaoMessage.sendMessage(parameters);
        log.info("메세지 보내기 요청!~!");
    }

메세지 요청을 보내는 코드는 위와 같고 헤더에 토큰, 콘텐츠 타입 모두 래퍼런스와 같이 지정해줬습니다 허나 요청을 보내면

{"msg":"failed to parse parameter. name=template_object, stringToParse=-, paramString=-, paramStringAlias=null","code":-2}

이런 에러가 발생됩니다. openFeign 로그로 request를 보면

  ---> POST https://kapi.kakao.com/v2/api/talk/memo/default/send HTTP/1.1
Authorization: Bearer ${access-token} 
Content-Length: 202
 Content-Type: application/x-www-form-urlencoded
template_object=%7B%22object_type%22%3A%22text%22%2C%22link%22%3A%22www.naver.com%22%2C%22text%22%3A%22%ED%85%8C%EC%8A%A4%ED%8A%B8%EC%9E%85%EB%8B%88%EB%8B%A4.%22%2C%22button_title%22%3A%22test+btn%22%7D
---> END HTTP (202-byte body) 

형식대로 잘 들어가고 있는거 같은데, 뭐가 문제일까요?

안녕하세요

@RequestParam("template_object") String templateObject);

sendMessage(templateObj.toString());

해보시겠어요?

안녕하세요

@PostMapping
void sendMessage(@RequestParam(“template_object”) String template_object);

@Override

// @Scheduled(cron = “0 51 9 * * ?”)
public void messageSetting() {

    MessageDto msg = new MessageDto();
    msg.setMessage("테스트입니다.");
    JSONObject templateObj = new JSONObject();
    templateObj.put("object_type", "text");
    templateObj.put("text", msg.getMessage());
    templateObj.put("link", "www.naver.com");
    templateObj.put("button_title", "test btn");


    MultiValueMap<String, Object> parameters = new LinkedMultiValueMap<>();

    parameters.add("template_object", templateObj.toString());

    log.info("요청 보내기 시작!");
    log.info(parameters.toString());
    kakaoMessage.sendMessage(templateObj.toString());
    log.info("메세지 보내기 요청!~!");
}

log 결과 : {template_object=[{“object_type”:“text”,“link”:“www.naver.com”,“text”:“테스트입니다.”,“button_title”:“test btn”}]}

request:

POST https://kapi.kakao.com/v2/api/talk/memo/default/send?template_object={"object_type"%3A"text"%2C"link"%3A"www.naver.com"%2C"text"%3A"테스트입니다."%2C"button_title"%3A"test%20btn"} HTTP/1.1
Authorization: Bearer ${access-token}
Content-Type: application/x-www-form-urlencoded
—> END HTTP (0-byte body)

response:

<— HTTP/1.1 400 Bad Request (59ms)
x-request-id: c7ff204a-3439-4238-82e3-aee69cd21a2f
{“msg”:“failed to parse parameter. name=template_object, stringToParse=-, paramString=-, paramStringAlias=null”,“code”:-2}

시도해봐도 똑같은 오류가 나네요ㅜㅜ