如何使我的Netbeans Java rest客户端访问Post方法?

如何使我的Netbeans Java rest客户端访问Post方法?,java,rest,post,netbeans,client,Java,Rest,Post,Netbeans,Client,我有一个netbean Rest Web服务项目,有以下几种方法: @Path("restws") 公共类RestWs{ @Context private UriInfo context; public RestWs() { } @GET @Produces("application/json") public String getJson() { return ("{\"pesan\":\"hello\"}"); } @PUT @Produces("text/plain")

我有一个netbean Rest Web服务项目,有以下几种方法:

@Path("restws")
公共类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());
}
}

然后我创建了一个新项目并添加了RESTWeb服务客户端。netbeans自动为我创建了一个新类:

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();
}
}

我可以使用以下方法轻松访问所有get方法:

public static void main(String[] args) {
    System.out.println(new NewJerseyClient().getMahasiswaQuery("23", "John"));
}
但当我尝试使用以下代码访问post/put方法时:

 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"));
}
所有方法调用都会给我一个异常:

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)
有人能帮我吗?如何访问方法put/post?或者任何人都有一个示例代码如何访问这些方法


谢谢

您的Rest服务代码看起来不错。然而,Netbeans中的客户端代码生成有一个问题,我已经在Netbeans中提交了一份报告

使您的客户机代码成功。请将请求内容类型从javax.ws.rs.core.MediaType.APPLICATION\u JSON更改为javax.ws.rs.core.MediaType.TEXT\u

类似地,对于postMahasiswaByID方法,将请求内容类型javax.ws.rs.core.MediaType.TEXT\u PLAIN更改为javax.ws.rs.core.MediaType.APPLICATION\u JSON

请让我知道它是否有效

谢谢
维迪亚

它在工作!!非常感谢你。。但是公共字符串postMahasiswaQuery()抛出ClientErrorException{return webTarget.path(“mahasiswaQuery”).request().post(null,String.class);}怎么样呢?post方法需要实体,我怎样才能生成那个对象?我很高兴它能为您工作。而且postMahasiswaQuery对我来说很有用。请用完整的示例代码和例外情况更新您的问题。
 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);
    }
        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);
    }