最終更新日:2020/02/14 原本2019/10/29

java - Jersey Client APIを使用してRESTfulコールにヘッダーを追加する方法

RESTful呼び出しの形式は次のとおりです。

  1. HEADERS:
  2. Content-Type: application/json;charset=UTF-8
  3. Authorization: Bearer Rc7JE8P7XUgSCPogjhdsVLMfITqQQrjg
  4. REQUEST:
  5. GET https://api.example.com/1/realTime?json={"selection":{"includeAlerts":"true","selectionType":"registered","selectionMatch":"","isTheEvent":"true","includeRuntime":"true"}}
  6.  

ここに私のコードがあります:

  1. try
  2. {
  3. Client client = Client.create();
  4. WebResource webResource =
  5. client.resource("https://api.example.com/1/realTime?json=
  6. {"selection":{"includeAlerts":"true","selectionType":"registered","selectionMatch":"","isTheEvent":"true","includeRuntime":"true"}}");
  7. //add header:Content-Type: application/json;charset=UTF-8
  8. webResource.setProperty("Content-Type", "application/json;charset=UTF-8");
  9. //add header: Authorization Bearer Rc7JE8P7XUgSCPogsdfdLMfITqQQrjg
  10. value = "Bearer " + value;
  11. webResource.setProperty("Authorization", value);
  12. MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
  13. queryParams.add("json", js);
  14. //Get response from RESTful Server
  15. jsonStr = webResource.get(String.class);
  16. System.out.println("Testing:");
  17. System.out.println(jsonStr);
  18. }
  19. catch (Exception e)
  20. {
  21. System.out.println (e.getMessage());
  22. e.printStackTrace();
  23. System.exit(0);
  24. }
  25.  

しかしエラーを返します

  1. com.sun.jersey.api.client.UniformInterfaceException: GET https://api.example.com/1/realTime? returned a response status of 500
  2. at com.sun.jersey.api.client.WebResource.handle(WebResource.java:607)
  3. at com.sun.jersey.api.client.WebResource.get(WebResource.java:187)
  4. at net.yorkland.restful.GetThermostatlist.GetThermostats(GetThermostatlist.java:60)
  5.  

ヘッダーを正しく追加しなかったと思います。

誰かがそれを修正するのを手伝ってくれますか?リクエストに応じてヘッダーを追加する方法を教えてください。

ありがとう

  • 解決した方法 # 1

    header(name、value)メソッドを探していると思います。 WebResource.header(String, Object) を参照

    ただし、Builderを返すため、webResource varに出力を保存する必要があります。

  • 解決した方法 # 2

    header(name、value)メソッドを使用して、webResource varに戻り値を指定します。

    1. Client client = Client.create();
    2. WebResource webResource =client.resource("uri");
    3. MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
    4. queryParams.add("json", js); //set parametes for request
    5. appKey = "Bearer " + appKey; // appKey is unique number
    6. //Get response from RESTful Server get(ClientResponse.class);
    7. ClientResponse response = null;
    8. response = webResource.queryParams(queryParams)
    9. .header("Content-Type", "application/json;charset=UTF-8")
    10. .header("Authorization", appKey)
    11. .get(ClientResponse.class);
    12. String jsonStr = response.getEntity(String.class);
    13.  

  • 解決した方法 # 3

    これを試してみてください

    1. Client client = ClientBuilder.newClient();
    2. String jsonStr = client
    3. .target("http:....")
    4. .request(MediaType.APPLICATION_JSON)
    5. .header("WM_SVC.NAME", "RegistryService")
    6. .header("WM_QOS.CORRELATION_ID", "d1f0c0d2-2cf4-497b-b630-06d609d987b0")
    7. .get(String.class);
    8.  

    P.Sこのようにヘッダーをいくつでも追加できます!

  • 解決した方法 # 4

    すべてのJersey応答にヘッダーを追加する場合は、 ContainerResponseFilter も使用できます 、ジャージーのフィルタードキュメントから:

    1. import java.io.IOException;
    2. import javax.ws.rs.container.ContainerRequestContext;
    3. import javax.ws.rs.container.ContainerResponseContext;
    4. import javax.ws.rs.container.ContainerResponseFilter;
    5. import javax.ws.rs.core.Response;
    6. @Provider
    7. public class PoweredByResponseFilter implements ContainerResponseFilter {
    8. @Override
    9. public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
    10. throws IOException {
    11. responseContext.getHeaders().add("X-Powered-By", "Jersey :-)");
    12. }
    13. }
    14.  

    @Provider を使用して、プロジェクトで正しく初期化してください  アノテーションまたは web.xml を使用した従来の方法による 。

  • 解決した方法 # 5

    このスニペットは、Jersey Clientを使用してベアラートークンを送信するために正常に機能します。

    1. WebTarget webTarget = client.target("endpoint");
    2. Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON);
    3. invocationBuilder.header("Authorization", "Bearer "+"Api Key");
    4. Response response = invocationBuilder.get();
    5. String responseData = response.readEntity(String.class);
    6. System.out.println(response.getStatus());
    7. System.out.println("responseData "+responseData);
    8.  

  • 前へ javascript - 複数のdivを切り替えます
  • 次へ asp.net - HTML divはブラウザウィンドウの外側に移動できますか?