2016-03-29 9 views
0

Ich habe NetBean Ruhe Web-Service-Projekt mit mehreren Verfahren wie folgt:Wie mache ich meinen Netbeans Java Rest Client Zugang Post Methode?

@Path("restws") 

public class RestWs {

@Context 
private UriInfo context; 

public RestWs() { 
} 


@GET 
@Produces("application/json") 
public String getJson() { 
    return ("{\"pesan\":\"hello\"}"); 
} 


@PUT 
@Produces("text/plain") 
@Consumes("application/json") 
public String putJson(String content) { 
    return("Content yang didapat : "+content); 
} 

@Path("/mahasiswaData/{id}") 
@GET 
@Produces("application/json") 
public String getMahasiswaByID(@PathParam("id")String nim) 
{ 
    JSONObject jo = new JSONObject(); 
    jo.put("id", nim); 
    jo.put("nama", "Budi"); 
    return(jo.toJSONString()); 
} 

@Path("/mahasiswaData/{id}") 
@POST 
@Consumes("text/plain") 
@Produces("application/json") 
public String postMahasiswaByID(@PathParam("id")String nim, String data) 
{ 
    JSONObject jo = new JSONObject(); 
    jo.put("id", nim); 
    jo.put("nama", "Budi"); 
    jo.put("message", data); 
    return(jo.toJSONString()); 
} 

@Path("/mahasiswaQuery") 
@GET 
@Produces("application/json") 
public String getMahasiswaQuery(@QueryParam("nim")String nim, @QueryParam("nama") String nama) 
{ 
    JSONObject jo = new JSONObject(); 
    jo.put("nim", nim); 
    jo.put("nama", nama); 
    jo.put("method", "GET"); 
    return(jo.toJSONString()); 
} 

@Path("/mahasiswaQuery") 
@POST 
@Produces("application/json") 
public String postMahasiswaQuery(@QueryParam("nim")String nim, @QueryParam("nama") String nama) 
{ 
    JSONObject jo = new JSONObject(); 
    jo.put("nim", nim); 
    jo.put("nama", nama); 
    jo.put("method", "Post"); 
    return(jo.toJSONString()); 
} 

}

dann i neues Projekt machen und Rest Web-Service-Client hinzufügen. Automatisch NetBeans mir eine neue Klasse gemacht:

public class NewJerseyClient { 
private WebTarget webTarget; 
private Client client; 
private static final String BASE_URI = "http://localhost:8080/PTIRestServer/webresources"; 

public NewJerseyClient() { 
    client = javax.ws.rs.client.ClientBuilder.newClient(); 
    webTarget = client.target(BASE_URI).path("restws"); 
} 

public String putJson(Object requestEntity) throws ClientErrorException { 
    return webTarget.request(javax.ws.rs.core.MediaType.APPLICATION_JSON).put(javax.ws.rs.client.Entity.entity(requestEntity, javax.ws.rs.core.MediaType.APPLICATION_JSON), String.class); 
} 

public String getMahasiswaByID(String id) throws ClientErrorException { 
    WebTarget resource = webTarget; 
    resource = resource.path(java.text.MessageFormat.format("mahasiswaData/{0}", new Object[]{id})); 
    return resource.request(javax.ws.rs.core.MediaType.APPLICATION_JSON).get(String.class); 
} 

public String postMahasiswaQuery() throws ClientErrorException { 
    return webTarget.path("mahasiswaQuery").request().post(null, String.class); 
} 

public String getMahasiswaQuery(String nim, String nama) throws ClientErrorException { 
    WebTarget resource = webTarget; 
    if (nim != null) { 
     resource = resource.queryParam("nim", nim); 
    } 
    if (nama != null) { 
     resource = resource.queryParam("nama", nama); 
    } 
    resource = resource.path("mahasiswaQuery"); 
    return resource.request(javax.ws.rs.core.MediaType.APPLICATION_JSON).get(String.class); 
} 

public String postMahasiswaByID(Object requestEntity, String id) throws ClientErrorException { 
    return webTarget.path(java.text.MessageFormat.format("mahasiswaData/{0}", new Object[]{id})).request(javax.ws.rs.core.MediaType.TEXT_PLAIN).post(javax.ws.rs.client.Entity.entity(requestEntity, javax.ws.rs.core.MediaType.TEXT_PLAIN), String.class); 
} 

public String getJson() throws ClientErrorException { 
    WebTarget resource = webTarget; 
    return resource.request(javax.ws.rs.core.MediaType.APPLICATION_JSON).get(String.class); 
} 

public void close() { 
    client.close(); 
} 

}

i-Methode zugreifen kann leicht alle erhalten, indem mit so etwas wie:

public static void main(String[] args) { 
    System.out.println(new NewJerseyClient().getMahasiswaQuery("23", "John")); 
} 

aber wenn ich versuche, Post/put-Methode für den Zugriff auf mit diesem Code:

public static void main(String[] args) { 
    NewJerseyClient c = new NewJerseyClient(); 
    System.out.println(c.putJson("{\"name\":\"john\"}")); 
    System.out.println(c.postMahasiswaQuery()); 
    System.out.println(c.postMahasiswaByID("plain text", "1")); 
} 

alle Methodenaufruf geben Sie mir eine Ausnahme:

Exception in thread "main" javax.ws.rs.NotAcceptableException: HTTP 406 Not Acceptable 
at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:898) 
at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:749) 
at org.glassfish.jersey.client.JerseyInvocation.access$500(JerseyInvocation.java:88) 
at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:650) 
at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
at org.glassfish.jersey.internal.Errors.process(Errors.java:228) 
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:421) 
at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:646) 
at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:402) 
at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:305) 
at client.NewJerseyClient.postMahasiswaByID(NewJerseyClient.java:68) 
at client.NewJerseyClient.main(NewJerseyClient.java:84) 

kann mir jemand helfen? Wie kann ich auf die Methode put/post zugreifen? oder hat jemand einen Beispielcode, wie man auf diese Methode zugreifen kann?

danke

Antwort

0

Ihr Rest Service-Code sieht gut aus. aber die Client-Code-Generationen in Netbeans hat ein Problem, ich habe eine bug in Netbeans abgelegt.

Um Ihren Client-Code erfolgreich zu machen. Bitte ändern Sie die putJson Anfrage Inhaltstyp von javax.ws.rs.core.MediaType.APPLICATION_JSON-javax.ws.rs.core.MediaType.TEXT_PLAIN

public String putJson(Object requestEntity) throws ClientErrorException { 
     return webTarget.request(javax.ws.rs.core.MediaType.TEXT_PLAIN) 
       .put(javax.ws.rs.client.Entity.entity(requestEntity, javax.ws.rs.core.MediaType.APPLICATION_JSON), String.class); 
    } 

Ebenso für postMahasiswaByID Verfahren ändern Sie den Anforderungs-Inhalt-Typ javax.ws.rs.core.MediaType.TEXT_PLAIN-javax.ws.rs.core.MediaType.APPLICATION_JSON

 public String postMahasiswaByID(Object requestEntity, String id) throws ClientErrorException { 
     return webTarget.path(java.text.MessageFormat.format("mahasiswaData/{0}", new Object[]{id})) 
       .request(javax.ws.rs.core.MediaType.APPLICATION_JSON) 
       .post(javax.ws.rs.client.Entity.entity(requestEntity, javax.ws.rs.core.MediaType.TEXT_PLAIN), String.class); 
    } 

Bitte lassen Sie mich wissen, wenn es funktioniert.

Dank vidhya

+0

es funktioniert !! Vielen Dank .. aber wie wäre es mit öffentlichen String postMahasiswaQuery() löst ClientErrorException { zurückgeben webTarget.path ("MahasiswaQuery"). request(). post (null, String.class); } die post-Methode erfordern Entität , wie kann ich das Objekt gemacht? – Fina

+0

Ich bin froh, es funktioniert für Sie. Und postMahasiswaQuery arbeitet für mich fina. Könnten Sie Ihre Fragen bitte mit dem vollständigen Beispielcode und der Ausnahme aktualisieren? –

Verwandte Themen