java - Jersey Client APIを使用してRESTfulコールにヘッダーを追加する方法
RESTful呼び出しの形式は次のとおりです。
HEADERS:Content-Type: application/json;charset=UTF-8Authorization: Bearer Rc7JE8P7XUgSCPogjhdsVLMfITqQQrjgREQUEST:GET https://api.example.com/1/realTime?json={"selection":{"includeAlerts":"true","selectionType":"registered","selectionMatch":"","isTheEvent":"true","includeRuntime":"true"}}
ここに私のコードがあります:
try{Client client = Client.create();WebResource webResource =client.resource("https://api.example.com/1/realTime?json={"selection":{"includeAlerts":"true","selectionType":"registered","selectionMatch":"","isTheEvent":"true","includeRuntime":"true"}}");//add header:Content-Type: application/json;charset=UTF-8webResource.setProperty("Content-Type", "application/json;charset=UTF-8");//add header: Authorization Bearer Rc7JE8P7XUgSCPogsdfdLMfITqQQrjgvalue = "Bearer " + value;webResource.setProperty("Authorization", value);MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();queryParams.add("json", js);//Get response from RESTful ServerjsonStr = webResource.get(String.class);System.out.println("Testing:");System.out.println(jsonStr);}catch (Exception e){System.out.println (e.getMessage());e.printStackTrace();System.exit(0);}
しかしエラーを返します
com.sun.jersey.api.client.UniformInterfaceException: GET https://api.example.com/1/realTime? returned a response status of 500at com.sun.jersey.api.client.WebResource.handle(WebResource.java:607)at com.sun.jersey.api.client.WebResource.get(WebResource.java:187)at net.yorkland.restful.GetThermostatlist.GetThermostats(GetThermostatlist.java:60)
ヘッダーを正しく追加しなかったと思います。
誰かがそれを修正するのを手伝ってくれますか?リクエストに応じてヘッダーを追加する方法を教えてください。
ありがとう
- 解決した方法 # 1
- 解決した方法 # 2
header(name、value)メソッドを使用して、webResource varに戻り値を指定します。
Client client = Client.create();WebResource webResource =client.resource("uri");MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();queryParams.add("json", js); //set parametes for requestappKey = "Bearer " + appKey; // appKey is unique number//Get response from RESTful Server get(ClientResponse.class);ClientResponse response = null;response = webResource.queryParams(queryParams).header("Content-Type", "application/json;charset=UTF-8").header("Authorization", appKey).get(ClientResponse.class);String jsonStr = response.getEntity(String.class);
- 解決した方法 # 3
これを試してみてください
Client client = ClientBuilder.newClient();String jsonStr = client.target("http:....").request(MediaType.APPLICATION_JSON).header("WM_SVC.NAME", "RegistryService").header("WM_QOS.CORRELATION_ID", "d1f0c0d2-2cf4-497b-b630-06d609d987b0").get(String.class);
P.Sこのようにヘッダーをいくつでも追加できます!
- 解決した方法 # 4
すべてのJersey応答にヘッダーを追加する場合は、
ContainerResponseFilterも使用できます 、ジャージーのフィルタードキュメントから:import java.io.IOException;import javax.ws.rs.container.ContainerRequestContext;import javax.ws.rs.container.ContainerResponseContext;import javax.ws.rs.container.ContainerResponseFilter;import javax.ws.rs.core.Response;@Providerpublic class PoweredByResponseFilter implements ContainerResponseFilter {@Overridepublic void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)throws IOException {responseContext.getHeaders().add("X-Powered-By", "Jersey :-)");}}
@Providerを使用して、プロジェクトで正しく初期化してください アノテーションまたはweb.xmlを使用した従来の方法による 。 - 解決した方法 # 5
このスニペットは、Jersey Clientを使用してベアラートークンを送信するために正常に機能します。
WebTarget webTarget = client.target("endpoint");Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON);invocationBuilder.header("Authorization", "Bearer "+"Api Key");Response response = invocationBuilder.get();String responseData = response.readEntity(String.class);System.out.println(response.getStatus());System.out.println("responseData "+responseData);
header(name、value)メソッドを探していると思います。
WebResource.header(String, Object)を参照ただし、Builderを返すため、webResource varに出力を保存する必要があります。