Passing an object to a REST Web Service using Jersey

前端 未结 5 753
无人共我
无人共我 2020-12-17 04:04

I have a simple WS that is a @PUT and takes in an object

@Path(\"test\")
public class Test {

    @PUT
    @Path(\"{nid}\"}
    @Consumes(\"appl         


        
5条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-17 04:32

    I had the same problem I solved in 3 Steps with Jackson in Netbeans/Glashfish btw.

    1)Requirements :

    some of the Jars I used :

     commons-codec-1.10.jar
     commons-logging-1.2.jar
     log4j-1.2.17.jar
     httpcore-4.4.4.jar
     jackson-jaxrs-json-provider-2.6.4.jar
     avalon-logkit-2.2.1.jar
     javax.servlet-api-4.0.0-b01.jar
     httpclient-4.5.1.jar
     jackson-jaxrs-json-provider-2.6.4.jar
     jackson-databind-2.7.0-rc1.jar
     jackson-annotations-2.7.0-rc1.jar
     jackson-core-2.7.0-rc1.jar
    

    If I missed any of the jar above , you can download from Maven here http://mvnrepository.com/artifact/com.fasterxml.jackson.core

    2)Java Class where you send your Post. First ,Convert with Jackson the Entity User to Json and then send it to your Rest Class.

    import com.fasterxml.jackson.databind.ObjectMapper;
    import ht.gouv.mtptc.siiv.model.seguridad.Usuario;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.json.simple.JSONObject;
    
    
    public class PostRest {
    
    
        public static void main(String args[]) throws UnsupportedEncodingException, IOException {
    
             // 1. create HttpClient
            DefaultHttpClient httpclient = new DefaultHttpClient();
    
            // 2. make POST request to the given URL
            HttpPost httpPost 
            = new HttpPost("http://localhost:8083/i360/rest/seguridad/obtenerEntidad");
    
    
            String json = "";
            Usuario u = new Usuario();
            u.setId(99L);
    
            // 3. build jsonObject
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("id", u.getId());
    
            // 4. convert JSONObject to JSON to String
            //json = jsonObject.toString();
    
            // ** Alternative way to convert Person object to JSON string usin Jackson Lib
             //ObjectMapper mapper = new ObjectMapper();
             //json = mapper.writeValueAsString(person);
            ObjectMapper mapper = new ObjectMapper();
           json = mapper.writeValueAsString(u);
    
            // 5. set json to StringEntity
            StringEntity se = new StringEntity(json,"UTF-8");
    
    
            // 6. set httpPost Entity
            httpPost.setEntity(se);
    
            // 7. Set some headers to inform server about the type of the content   
            httpPost.setHeader("Accept", "application/json");
            httpPost.setHeader("Content-type", "application/json");
    
            // 8. Execute POST request to the given URL
            HttpResponse httpResponse = httpclient.execute(httpPost);
    
            // 9. receive response as inputStream
            //inputStream = httpResponse.getEntity().getContent();
    
    }
    
    
    }
    

    3)Java Class Rest where you want to receive the Entity JPA/Hibernate . Here with your MediaType.APPLICATION_JSON you recieve the Entity in this way :

    ""id":99,"usuarioPadre":null,"nickname":null,"clave":null,"nombre":null,"apellidos":null,"isLoginWeb":null,"isLoginMovil":null,"estado":null,"correoElectronico":null,"imagePerfil":null,"perfil":null,"urlCambioClave":null,"telefono":null,"celular":null,"isFree":null,"proyectoUsuarioList":null,"cuentaActiva":null,"keyUser":null,"isCambiaPassword":null,"videoList":null,"idSocial":null,"tipoSocial":null,"idPlanActivo":null,"cantidadMbContratado":null,"cantidadMbConsumido":null,"cuotaMb":null,"fechaInicio":null,"fechaFin":null}"

        import javax.ws.rs.Consumes;
        import javax.ws.rs.GET;
        import javax.ws.rs.POST;
    
        import javax.ws.rs.Path;
        import javax.ws.rs.PathParam;
        import javax.ws.rs.Produces;
        import javax.ws.rs.core.MediaType;
        import org.json.simple.JSONArray;
    
        import org.json.simple.JSONObject;
        import org.apache.log4j.Logger;
    
        @Path("/seguridad")
        public class SeguridadRest implements Serializable {
    
    
    
           @POST
            @Path("obtenerEntidad")
            @Consumes(MediaType.APPLICATION_JSON)
            public JSONArray obtenerEntidad(Usuario u) {
                JSONArray array = new JSONArray();
                LOG.fatal(">>>Finally this is my entity(JPA/Hibernate) which 
    will print the ID 99 as showed above :" + u.toString());
                return array;//this is empty
    
            }
           ..
    

    Some tips : If you have problem with running the web after using this code may be because of the @Consumes in XML ... you must set it as @Consumes(MediaType.APPLICATION_JSON)

提交回复
热议问题