JAX-RS(Jakarta RESTful Web Service) 구현물중 하나인 jersey 1.x 를 사용중이었는데 2.x 대로 업그레이드할 필요가 생겼습니다.

2.x 대의 마지막은 2.35 길래 이 버전으로 gradle 을 설정하고 매뉴얼 뒤져가며 2.x 대로 이식을 끝냈는데 REST API 요청이 HTTP 415 에러와 함께 실패했습니다.

ext {
	jerseyVersion = '2.34'
}

dependencies {
    implementation "org.glassfish.jersey.core:jersey-client:$jerseyVersion"
    implementation "org.glassfish.jersey.inject:jersey-hk2:$jerseyVersion"
    implementation "org.glassfish.jersey.media:jersey-media-sse:$jerseyVersion"
    implementation "org.glassfish.jersey.media:jersey-media-multipart:$jerseyVersion"
}
GROOVY


이럴 경우 어떤 요청을 하는지 HTTP Request 를 출력해서 확인해 보면 바로 원인을 알수 있으므로 대수롭지 않게 생각했는데 이런.... Jersey 가 수행하는 HTTP Request 를 출력하는게 안 됐습니다.


매뉴얼에는 LoggingFeature 를 설정하고client 에  등록해주면 된다고 나왔는데 말이죠.

ClientConfig clientConfig = new ClientConfig();
clientConfig.property(LoggingFeature.LOGGING_FEATURE_VERBOSITY_CLIENT, LoggingFeature.Verbosity.PAYLOAD_ANY);
Client client = ClientBuilder.newClient(clientConfig);
JAVA


이리 저리 해보다가 안 되서 구글링했고 다음과 같이 Jersey 를 사용하는 클래스에 LoggingFeature 를 설정하는 메서드를 만들고 client 에 이 메서드를 등록해주니 정상적으로 로그 출력이 됐습니다.

public LoggingFeature logging() {
	java.util.logging.Logger logger = java.util.logging.Logger.getLogger(this.getClass().getName());
	return new LoggingFeature(logger, java.util.logging.Level.INFO, LoggingFeature.Verbosity.PAYLOAD_ANY, null);
}

ClientConfig clientConfig = new ClientConfig();
Client client = ClientBuilder.newClient(clientConfig);

// LoggingFeature 등록
client.register(logging());
JAVA


로그를 보니 HTTP 415 에러가 난 이유는 post 에 Entity.text() 를 호출해서 Content-Type 헤더가 text/plain 으로 가서였고 Entity.json() 으로 변경하니 정상적으로 동작했습니다/

webTarget.request(MediaType.APPLICATION_JSON + ";charset=utf-8")
									.header(HttpHeaders.AUTHORIZATION, "Bearer " + this.pat)
//									.post(Entity.text(content));
									.post(Entity.json(content)); 
CODE


Ref