By kswaughs | Thursday, November 26, 2015

How to read headers from REST response with Apache CXF

In my previous post, I have explained how to pass headers to RESTful services using Apache CXF.

CXF Rest client passing headers to request

For the same example, we will see how to read/parse headers from the REST response.

There are two ways to read/parse the headers from REST response

  • Example 1 - Using getHeaderString method of Response object to read a single header value
  • Example 1 - Using MultivaluedMap to read all header values

Using getHeaderString method of Response

Example 1
package com.example.cxfrs;

import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.core.Response;

import com.example.cxfrs.beans.UserRequest;
import com.example.cxfrs.beans.UserResponse;
import org.apache.cxf.jaxrs.client.WebClient;
import org.codehaus.jackson.jaxrs.JacksonJsonProvider;

public class CXFRestPostClient {

 public static void main(String[] args) {

  // Adding JacksonJsonProvider to convert JSON String to Java object
  List<Object> providers = new ArrayList<Object>();
  providers.add(new JacksonJsonProvider());

  // Build REST request
  UserRequest req = new UserRequest();
  req.setId("1234578");
  req.setName("kswaughs");

  // Create WebClient 
  WebClient client = WebClient.create(
    "http://127.0.0.1:8080/camel-rest-0.0.1-SNAPSHOT/user/add",
    providers);

  // Adding headers
  client = client.accept("application/json").type("application/json")
    .header("consumer_id", "StandAloneRestClient")
    .header("consumer_location", "US");

  // Call the REST service
  Response r = client.post(req);
  
  //Read/parse the response headers
  System.out.println("date:"+ r.getHeaderString("Date"));
  
  // Read/parse the response
  UserResponse resp = r.readEntity(UserResponse.class);
  
  System.out.println(resp);
 }

Server log - Response

ID: 5
Response-Code: 200
Content-Type: application/json
Headers: {Content-Type=[application/json], Date=[Fri, 27 Nov 2015 06:50:34 GMT]}
Payload: {"id":"1234578","status":"Success"}

Output is

date:Fri, 27 Nov 2015 06:50:34 GMT
UserResponse [status=Success, id=1234578]

Using MultivaluedMap to read all header values

Example 2
package com.example.cxfrs;

import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.core.MultivaluedHashMap;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;

import com.example.cxfrs.beans.UserRequest;
import com.example.cxfrs.beans.UserResponse;
import org.apache.cxf.jaxrs.client.WebClient;
import org.codehaus.jackson.jaxrs.JacksonJsonProvider;

public class CXFRestPostClient {

 public static void main(String[] args) {

  // Adding JacksonJsonProvider to convert JSON String to Java object
  List<Object> providers = new ArrayList<Object>();
  providers.add(new JacksonJsonProvider());

  // Build REST request
  UserRequest req = new UserRequest();
  req.setId("1234578");
  req.setName("kswaughs");

  // Create WebClient 
  WebClient client = WebClient.create(
    "http://127.0.0.1:8080/camel-rest-0.0.1-SNAPSHOT/user/add",
    providers);

  // Adding headers
  MultivaluedMap<String, String> reqHeaders = new MultivaluedHashMap<String, String>();
  reqHeaders.add("consumer_id", "StandAloneRestClient");
  reqHeaders.add("consumer_location", "US");
  
  client = client.accept("application/json")
                 .type("application/json")
                 .headers(reqHeaders);

  // Call the REST service
  Response r = client.post(req);
  
  //Read/parse the response headers
  MultivaluedMap<String, String> respHeaders = r.getStringHeaders();
  System.out.println("respHeaders:\n" + respHeaders);
  
  // Read/parse the response
  UserResponse resp = r.readEntity(UserResponse.class);
  
  System.out.println(resp);
 }
}

Output is

respHeaders:
{content-type=[application/json], Date=[Fri, 27 Nov 2015 07:13:16 GMT], Server=[Apache-Coyote/1.1], transfer-encoding=[chunked], Content-Type=[application/json]}

UserResponse [status=Success, id=1234578]

Recommend this on


1 comment:

  1. Good examples, but it takes too much time for me to understand how all this mechanism works.But then I found out this nice site that helps me to understand parse json java https://explainjava.com/parse-json-java/ and everything immediately become very clear for me.

    ReplyDelete