RESTful呼び出しの形式は次のとおりです。
HEADERS:
Content-Type: application/json;charset=UTF-8
Authorization: Bearer Rc7JE8P7XUgSCPogjhdsVLMfITqQQrjg
REQUEST:
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-8
webResource.setProperty("Content-Type", "application/json;charset=UTF-8");
//add header: Authorization Bearer Rc7JE8P7XUgSCPogsdfdLMfITqQQrjg
value = "Bearer " + value;
webResource.setProperty("Authorization", value);
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
queryParams.add("json", js);
//Get response from RESTful Server
jsonStr = 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 500
at 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)
ヘッダーを正しく追加しなかったと思います。
誰かがそれを修正するのを手伝ってくれますか?リクエストに応じてヘッダーを追加する方法を教えてください。
ありがとうございました
Header(name、value)メソッドを探していると思います。 WebResource.header(String, Object)
を参照してください
ただし、Builderが返されることに注意してください。そのため、webResource変数に出力を保存する必要があります。
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 request
appKey = "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);
これを試して!
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);
追伸このようにヘッダーをいくつでも追加できます!
すべてのJersey応答にヘッダーを追加する場合は、 Jersey's filter documentation の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;
@Provider
public class PoweredByResponseFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
throws IOException {
responseContext.getHeaders().add("X-Powered-By", "Jersey :-)");
}
}
@Provider
アノテーションを使用して、またはweb.xml
を使用した従来の方法を使用して、プロジェクト内で正しく初期化してください。
String sBodys="Body";
HashMap<String,String> headers= new HashMap<>();
Client c = Client.create();
WebResource resource = c.resource("http://consulta/rs");
WebResource.Builder builder = resource.accept(MediaType.APPLICATION_JSON);
builder.type(MediaType.APPLICATION_JSON);
if(headers!=null){
LOGGER.debug("se setean los headers");
for (Map.Entry<String, String> entry : headers.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
LOGGER.debug("key: "+entry.getKey());
LOGGER.debug("value: "+entry.getValue());
builder.header(key, value);
}
}
ClientResponse response = builder.post(ClientResponse.class,sBodys);
このスニペットは、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);