为什么我的REST服务器的响应状态为204 No content?

问题描述 投票:0回答:2

我是REST API的新手,并且通常使用服务器,我正在尝试创建一个简单的客户端 - 服务器应用程序。我正在使用泽西岛。

客户端将一些数据发送到服务器,服务器接收数据并将其显示在所需的uri上,反之亦然。

接收托管在服务器上的数据的反之亦然部分工作正常,但我无法将数据发送到服务器。

我试过像这样的POST:

    @POST
    @Path("/something")
    @Consumes("application/x-www-form-urlencoded")
    public void getSomething(){

    }

我的客户端代码看起来像这样:

Client client = Client.create();
MultivaluedMap formData = new MultivaluedMapImpl();
        formData.add("name1", "val1");
        formData.add("name2", "val2");

        WebResource resource = client.resource("http://localhost:8080/artifact/rest/something");

        ClientResponse response = resource.type("application/x-www-form-urlencoded").post(ClientResponse.class, formData);

        System.out.println(response);

我试图将一个字符串或json类型的对象发送到服务器,它应该在该URL上显示它。但我无法这样做。

如果有人可以帮助我,我会很感激。

编辑我也很感激,如果有人能告诉我如何使用这样的代码将数据发送到服务器。

java rest server jersey
2个回答
0
投票

尝试将此格式用于球衣服务器端,尽管您使用的是相同的:

@POST
@Path("your path")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)

对于客户端,请尝试使用此功能。

    CloseableHttpClient httpClient = HttpClientBuilder.create().build();
    HttpPost post = new HttpPost(url + "/rest/something");
    post.addHeader("Accept" , "application/json");
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("name1", "val1"));
    params.add(new BasicNameValuePair("name2", "val2"));
    post.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
    HttpResponse response = httpClient.execute(post);
    String out = EntityUtils.toString(response.getEntity());

0
投票

你的getSomething没有返回任何东西。这转换为204 No Content响应:操作成功(代码的2xx表明这一点),但没有任何回报。

如果要返回某些内容,请将返回类型从void更改为Response

@POST
@Path("/something")
@Consumes("application/x-www-form-urlencoded")
@Produces("text/plain")
public Response getSomething() {
  return Response.ok("Success!").build();
}

这将返回HTTP状态代码200 OK,其中Success!作为响应正文的内容。

但您可能希望以某种方式使用请求的内容。看看jax-rs retrieve form parameters如何做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.