java - 泽西客户端响应状态 204

标签 java web-services jersey

我正在为服务和客户端使用 Jersey。当我尝试调用该服务时,出现此错误:

Exception in thread "main" com.sun.jersey.api.client.UniformInterfaceException: GET http://localhost:8080/Maze/rest/service/overview?countryid=1 returned a response status of 204 No Content
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:528)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:506)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:674)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:503)
at com.maze.client.MyClient.overviewTest(MyClient.java:34)
at com.maze.client.MyClient.main(MyClient.java:64)

我不明白为什么。

这是服务:

@GET
@Produces(MediaType.APPLICATION_JSON )
@Path("/overview")
public JSONArray getOverviewEntities(@QueryParam("countryid")String id){
    JSONArray array = null;
    try{
    Integer countryId = Integer.parseInt(id);
    ArrayList<Event> list = new ArrayList<Event>();
    EventService event = new EventService();
    EntityManagerSingleton.getInstance().getTransaction().begin();
    list.addAll(event.getList(countryId, "country", 5));
    EntityManagerSingleton.getInstance().getTransaction().commit();
    for(Event ev : list){
        array.add(EventService.toJSONObject(ev));
    }
    } catch(Exception e){
        e.printStackTrace();
    }
    return array;
}

这是客户端:

public static void overviewTest(){
    WebResource wbr;
    Client client = Client.create();
    wbr = client.resource("http://localhost:8080/Maze/rest/service/overview");  
    JSONArray result = wbr.queryParam("countryid", "1").accept(MediaType.APPLICATION_JSON).get(JSONArray.class);
    System.out.println(result.toString());
}

我真的不知道问题出在哪里。我知道这里有一个看似相同的主题的另一个问题,但事实并非如此。

如果我遗漏了什么或者您需要任何额外信息,请告诉我。

最佳答案

204 是一个 HTTP 响应状态码,通知客户端没有返回内容。 当您的客户端调用 get(JSONArray.class) 时,它期望 200 包含数据,因此异常。 从你的服务器实现来看,数组变量永远不会被实例化,所以如果你的列表不为空,它可能会在 array.add() 中出现 NPE,但在这种情况下,你的列表看起来可能是空的,所以 for 循环没有向上迭代并且 getOverviewEntities 方法返回 null,因此返回 204 结果。

JSONArray array = new JSONArray(); // should fix the issue :)

关于java - 泽西客户端响应状态 204,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9447981/

相关文章:

java - 在 Android 应用程序中访问 C++ Web 服务

java - Jersey 在 Servlet 3.0/Tomcat 7.0 上运行的简单 REST 服务未运行但 http 状态为 500

web-services - 入站和出站 Web 服务之间的区别

asp.net - 为什么在 ASP.NET Web 应用程序上调用 WebMethod 时出现不明确的类型错误?

java - 如何记录 rxJava2 的所有异常的堆栈跟踪?

java - Controller 上的 Spring MVC 404

php - 如何保护 web 服务,以便只有我的 android 应用程序可以使用我的 web 服务

Jersey JAX-RS REST "getter"方法总是被调用

tomcat - Jersey 是如何连接到 servlet 3 容器的

java - Jersey 2.22 UnsatisfiedDependencyException