How to submit a HashMap object through the Jersey web service framework?

I have simple hash cards that I want to send to JSON via Jersey. Does anyone have an example of how to perform such an operation, I tried the following

package de.vogella.jersey.first; import java.util.HashMap; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import com.sun.jersey.api.view.Viewable; // This method is called if XML is request @GET @Produces({ MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON }) public HashMap sayXMLHello() { HashMap map = new HashMap(); map.put( new Integer( 2 ), "two" ); map.put( new Integer( 4 ), "four" ); return map; } // This method is called if HTML is request @GET @Produces(MediaType.TEXT_HTML) public String sayHtmlHello() { return "<html> " + "<title>" + "Hello Jersey" + "</title>" + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> "; } } 

and then client

 package de.vogella.jersey.first; import java.net.URI; import java.util.HashMap; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.UriBuilder; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.config.ClientConfig; import com.sun.jersey.api.client.config.DefaultClientConfig; public class Test { public static void main(String[] args) { ClientConfig config = new DefaultClientConfig(); Client client = Client.create(config); WebResource service = client.resource(getBaseURI()); // Calls the HashMap function System.out.println( service.path("rest") .path("hello") .accept(MediaType.APPLICATION_JSON) .get(HashMap.class)); // The HTML System.out.println(service.path("rest") .path("hello") .accept(MediaType.TEXT_HTML) .get(String.class)); } private static URI getBaseURI() { return UriBuilder.fromUri("http://localhost:8080/de.vogella.jersey.first").build(); } } 

After deploying and calling the client class, I get the following error:

 Exception in thread "main" com.sun.jersey.api.client.UniformInterfaceException: GET http://localhost:8080/de.vogella.jersey.first/rest/hello returned a response status of 500 Internal Server Error at com.sun.jersey.api.client.WebResource.handle(WebResource.java:686) at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:507) at de.vogella.jersey.first.Test.main(Test.java:25) 

so any ideas on how I can send a HashMap object from server to client using jersey? also I can not map the HashMap object to POJO in order not to have a homogeneous structure (constantly changing)

thanks.

+4
source share
4 answers

It looks like an old stream, responding so that it can help someone.

First, as mentioned by others, the 500 error is most likely related to a problem in the server-side code and has nothing to do with the client.

To get a hash map of type Map in the jersey client, use GenericType, as shown in the code below.

  ClientConfig config = new DefaultClientConfig(); Client client = Client.create(config); WebResource service = client.resource(getBaseURI()); // Calls the HashMap function System.out.println( service.path("rest") .path("hello") .accept(MediaType.APPLICATION_JSON) .get(new GenericType<Map<String, String>>() {})); 
+1
source

First find out what the server-side exception is. This probably explains the real problem much better than asking questions before doing the full problem.

0
source

This is sample code for sending hashmap data through a REST service

 // CLIENT SIDE package testHashMap; import java.util.HashMap; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.MediaType; import org.codehaus.jackson.map.ObjectMapper; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; public class SendHashMap extends HttpServlet{ /** * */ private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest request,HttpServletResponse response){ HashMapAcceptModel model = new HashMapAcceptModel(); HashMap<String, String> positionList = new HashMap<String, String>(); positionList.put("Key1", "Value1"); positionList.put("Key2", "Value2"); positionList.put("Key3", "Value3"); model.setCompleteHashMapListList(positionList); try { Client client = Client.create(); ObjectMapper mapper = new ObjectMapper(); String JSONData = mapper.writeValueAsString(model); System.out.println("JSON Object :"+JSONData); WebResource webResource = client.resource("http://localhost:8080/RESTServer/gtl/json/metallica/JSONHashMapData"); ClientResponse clientResponse = webResource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, JSONData); System.out.println("Client Response :"+clientResponse.getEntity(String.class)); } catch (Exception e) { e.printStackTrace(); } } } *********************************************************************************************************************************************************************** // CLIENT SIDE package testHashMap; import java.util.HashMap; public class HashMapAcceptModel { public HashMap<String, String> completeHashMapListList = new HashMap<String, String>(); public HashMap<String, String> getCompleteHashMapListList() { return completeHashMapListList; } public void setCompleteHashMapListList(HashMap<String, String> completeHashMapListList) { this.completeHashMapListList = completeHashMapListList; } @Override public String toString() { return "HashMapAcceptModel [completeHashMapListList=" + completeHashMapListList + "]"; } } *********************************************************************************************************************************************************************** // SERVER SIDE package testHashMap; import java.util.HashMap; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @Path("/json/metallica") public class JSONService { public static HashMap<String, String> positionList = new HashMap<String, String>(); @POST @Path("/JSONHashMapData") @Consumes(MediaType.APPLICATION_JSON) public Response addLocationMap(HashMapAcceptModel hashmapModel){ System.out.println("result :"+hashmapModel.getCompleteHashMapListList()); String result = "Success"; System.out.println("result :"+result); return Response.status(201).entity(result).build(); } } *********************************************************************************************************************************************************************** // SERVER SIDE package testHashMap; import java.util.HashMap; public class HashMapAcceptModel { public HashMap<String, String> completeHashMapListList = new HashMap<String, String>(); public HashMap<String, String> getCompleteHashMapListList() { return completeHashMapListList; } public void setCompleteHashMapListList(HashMap<String, String> completeHashMapListList) { this.completeHashMapListList = completeHashMapListList; } @Override public String toString() { return "HashMapAcceptModel [completeHashMapListList=" + completeHashMapListList + "]"; } } *********************************************************************************************************************************************************************** 

You may need to use these library files.

enter image description here

0
source

Jersey does not provide MessageBodyWriter for HashMap. You need to write your own MessageBodyWriter. See this link

-1
source

Source: https://habr.com/ru/post/1439730/


All Articles