쌓고 쌓다
No HttpMessageConverter for java.util.HashMap and content type "application/x-www-form-urlencoded" 본문
프로그래밍/spring
No HttpMessageConverter for java.util.HashMap and content type "application/x-www-form-urlencoded"
승민아 2023. 9. 1. 17:36서버에서 외부 api를 사용할 일이 있어서 restTemplate라는걸 사용해보는데... 아래의 에러가 발생.!
문제의 코드
RestTemplate restTemplate = new RestTemplate();
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
Map<String, String> map = new HashMap<>();
map.put("grant_type", grantType);
map.put("client_id", clientId);
map.put("redirect_uri", redirectUri);
map.put("code", ingaCode);
HttpEntity<Map> request = new HttpEntity<>(map, httpHeaders);
ResponseEntity<String> stringResponseEntity = restTemplate.postForEntity(uri, request, String.class);
에러 발생
org.springframework.web.client.RestClientException:
No HttpMessageConverter for java.util.HashMap and content type "application/x-www-form-urlencoded"
HTTP 메시지 컨버터?
https://non-stop.tistory.com/548
간단히 HTTP Message Body에 읽거나 쓸떄 HTTP Message Converter가 동작한다.
메시지 컨버터는 대상 클래스 타입과 미디어 타입을 체크하여 결정한다.
에러 원인
내가 요청한 컨텐츠 타입은 HashMap이였고
적절한 메시지 컨버터가 없어 선택되지 않아서 위의 Exception이 터졌다.
즉, application/x-www-form-urlencoded 미디어 타입의 경우
HashMap으로 변환할 수 없어서 예외가 터진것이다.
에러 해결 방법
MultiValueMap의 경우
MultiValueMap으로 변경
MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add("grant_type", grantType);
map.add("client_id", clientId);
map.add("redirect_uri", redirectUri);
map.add("code", ingaCode);
MultiValueMap<String, String> = new LinkedMultiValueMap<>() 사용시
Map과 동일하게 .put("1","A")를 사용했더니 Value 타입이 List가 아니라 에러가 떴다.
이때 .add 메서드를 사용하면 .add("1","A")로 삽입이 가능하다.
put과 add의 차이가 뭘까?
add는 중복된 key가 있는 경우에 해당 Key의 Value인 List에 삽입이된다.
put은 해당 Key의 Value를 List로 대체(갱신)해버린다.
'프로그래밍 > spring' 카테고리의 다른 글
Set-Cookie가 되었으나 쿠키가 저장이 안될때 (0) | 2023.09.03 |
---|---|
JSON 데이터 꺼내기 with 중첩된 JSON 다루기 (0) | 2023.09.03 |
typeMismatch 처리와 에러 코드 관리 - 26 (0) | 2023.09.01 |
Invalid target for Validator 에러 고찰 (0) | 2023.08.31 |
properties의 한글 값 ??로 출력되는 문제 해결방법 (0) | 2023.08.30 |
Comments