개발환경 : Springboot
앱 ID :1000660
안녕하세요.
‘카카오싱크>토큰받기’ 부분을 기존에 아래 코드로 요청 시 정상동작 하였는데 현재 Query String형식으로 보내주지 않으면 에러가 발생합니다.
client_secret 코드 값도 사용 안하고 있습니다.
확인부탁드립니다.
기존 Post body에 data 넣어서 요청하는 형식(기존에 정상 동작 → 401 Unauthorized(KOE010) 에러 발생
ResponseEntity<Map> response = rt.exchange(
token_url,
HttpMethod.POST,
entity,
Map.class
);
현재 정상 동작하는 코드
String str = params.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue())
.collect(Collectors.joining("&"));
ResponseEntity<Map> response = rt.postForEntity(token_url+str, null, Map.class);
안녕하세요.
코드에 원인이 있을것 같은데요
구현하신 코드 모두 올려봐 주시겠어요?
호출 코드 전문입니다.
@PropertySource("classpath:properties/sync.properties")
@RestController
public class KakaoSyncController {
@Value("${kakao.sync.client_id}")
private String client_id;
@Value("${kakao.sync.redirect_uri}")
private String redirect_uri;
@Value("${kakao.sync.token_url}")
private String token_url;
private SyncUtil syncUtil;
@GetMapping("/cust/code.do")
public void getSyncCode(SyncCode code) throws IllegalAccessException, NoSuchFieldException, SecurityException {
RequestToken requestToken = new RequestToken();
requestToken.setClient_id(client_id);
requestToken.setRedirect_uri(redirect_uri);
requestToken.setCode((String) code.getCode());
requestToken.setClient_secret(null);
System.out.println("response : " + sendRestAPI(requestToken, token_url));
}
public ResponseEntity<ResponseToken> sendRestAPI(Object obj, String targetUrl) throws IllegalAccessException, NoSuchFieldException, SecurityException{
RestTemplate rt = new RestTemplate();
rt.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
//헤더셋팅
HttpHeaders headers = new HttpHeaders();
headers.add("Content-type", "application/x-www-form-urlencoded;charset=UTF-8");
//보낼 파라메터 셋팅
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
// Map<String, Object> params = new HashMap();
for(Field field : obj.getClass().getDeclaredFields()) {
field.setAccessible(true);
String value = (String) field.get(obj);
params.add(field.getName(), value);
}
//파라메터와 헤더 합치기
HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity(headers, params);
// 요청 보내고 응답받기
ResponseEntity<ResponseToken> response = rt.exchange(
token_url,
HttpMethod.POST,
entity,
ResponseToken.class
);
return response;
}
}
헤더 값을 앞에 셋팅 한것으로 보이는데요 순서 바꿔 보시겠어요?
new HttpEntity(params, headers);