사업자 등록번호 검증을 위해 공공 데이터 포털의
"국세청_사업자등록정보 진위확인 및 상태조회 서비스" api를 사용해야 했다.
서버에서 이를 구현하기 위한 코드를 작성한 후,
Postman을 통해 테스트를 해 본 결과 정상적으로 구현이 되었음을 확인했고,
프론트엔드와 연결하여 로컬 서버에서 테스트를 했다.
그런데?
org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request on POST request for "https://api.odcloud.kr/api/nts-businessman/v1/validate": "{"code":-4,"msg":"등록되지 않은 인증키 입니다."}<EOL>"
위와 같은 에러가 발생한다.
문제 코드
// 사업자 등록번호 검증
public String validateBusinessNumber(BusinessNumberRequest request) throws URISyntaxException {
String fullUrl = baseUrl + "?serviceKey=" + serviceKey;
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("businesses", List.of(
Map.of(
"b_no", request.businessNumber(),
"start_dt", request.startDate(),
"p_nm", request.owner()
)
));
HttpEntity<Map<String, Object>> entity = new HttpEntity<>(requestBody, headers);
ResponseEntity<String> response = restTemplate.exchange(
fullUrl,
HttpMethod.POST,
entity,
String.class
);
return response.getBody();
}
Postman에서 테스트를 성공한 것으로 보아 분명 인증키에는 문제가 없었다.
검색을 통해 문제의 핵심은 URL 인코딩에 있었다는 것을 알게 되었다.
서버 코드에서 URL을 전송할 때 문자열을 그대로 사용했기 때문에,
특수 문자가 포함된 인증키가 올바르게 전달되지 않았던 것이다!!!!!!!!!!!
JAVA의 URI 클래스를 사용해서 해결
String fullUrl = baseUrl + "?serviceKey=" + serviceKey;
URI uri = new URI(fullUrl);
위와 같이 URI클래스에 내가 사용하려는 URL 문자열을 집어넣어 인코딩 처리를 함으로써
인증키를 정상적으로 인식할 수 있도록 했다!
| Github Actions 빌드 중 발생한 에러 (0) | 2025.04.28 |
|---|---|
| GitHub Actions 워크플로우 권한 설정이 되지 않을 때 (0) | 2025.04.28 |
| JWT 토큰 갱신이 작동하지 않은 문제, ddl-auto=create (0) | 2025.02.26 |
| Spring Boot에서 @ModelAttribute와 폼 데이터 바인딩 문제 (0) | 2025.02.25 |
| 소셜 로그인시 브라우저에 accessToken 토큰이 발행되지 않음 (0) | 2025.02.24 |