java.lang.IllegalArgumentException: ‘Content-Type’ cannot contain wildcard type ‘*’
오류
RestTemplate 으로 요청을 하는데 온전히 전송되지도 않고 오류를 뱉어냈다. 오류 내용을 그대로 보면 “Content-Type” 에는 “*” 와 같은 와일드 카드를 포함할 수 없다고 나온다. 그래서 코드를 살펴보았는데,
HttpHeaders headers = new HttpHeaders();
HttpEntity<Object> entity = new HttpEntity<>(params, headers);
라고 되어있었다. 다만 궁금한 점은 아래 코드 부분인데,
public void setContentType(@Nullable MediaType mediaType) {
if (mediaType != null) {
Assert.isTrue(!mediaType.isWildcardType(), "Content-Type cannot contain wildcard type '*'");
Assert.isTrue(!mediaType.isWildcardSubtype(), "Content-Type cannot contain wildcard subtype '*'");
set(CONTENT_TYPE, mediaType.toString());
}
else {
remove(CONTENT_TYPE);
}
}
Content-Type 을 설정하지 않았을 경우에 또는 알 수 없는 경우에 “*” 와 같은 와일드카드가 설정되는가이다.
찾아보니 Accept 헤더를 설정하지 않거나 사용하지 않는 경우에 혹은 MediaType.ALL 로 설정한 경우에는 응답 타입을 알지 못한다. 그래서 제목과 같은 오류를 발생한다고 한다.
오류 해결 방법은 간단했다. Header 에 Content-Type 을 지정해주면 된다.
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
참고
Problem to Understand correct configuration for Http GET Requests on Spring Integration
댓글남기기