【问题标题】:sending arraylist from a rest service从休息服务发送arraylist
【发布时间】:2015-12-22 13:10:22
【问题描述】:

我是 web 服务和 REST 的新手。我正在尝试使用 rest java 客户端将消息作为发布请求发送到休息服务。我也在尝试获取先前请求的响应(所有内容均为 json 格式)。因此,我将消息对象存储到一个数组列表中并将该列表作为响应发送。但我无法收到以前的消息。请告诉我是否做错了什么。 这是我的消息模型类。

public class Messages {

private String id;
private String message;

public Messages() {
    
    }

public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
public String getMessage() {
    return message;
}
public void setMessage(String message) {
    this.message = message;
}

以下是我接收消息对象并返回json数组的webservice。

    @Path("/json/messages")
public class JSONMessages { 
public List<Messages> list = new ArrayList<Messages>();     
      List<Messages> getAllMessages(Messages m){
          list.add(m);
          return list;      
    }
    @POST
    @Path("/post")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)               
    public Response MessageListInJSON(Messages msg) {       
        System.out.println("message saved");
        if(!(msg.getId().equals("1"))){
            String output ="Invalid User";
            return Response.ok(output).build();         
        }
        else{        
        return Response.ok(getAllMessages(msg)).build();
    }
    }
}

最后,下面是我的客户端代码

    public class ClientPost {

  public static void main(String[] args) {
      
        
    try {

        ClientConfig clientConfig = new DefaultClientConfig();
        
        Client client = Client.create(clientConfig);

        WebResource webResource = client
           .resource("http://localhost:8050/lab.rest.webservices/rest/json/messages/post");
        //for(int i=0;i<5;i++){
        
        String input = "{\"id\":\"1\", \"message\":\"hey there!\"}";
        
        
        ClientResponse response = webResource.accept("application/json").type("application/json")
                .entity(input).post(ClientResponse.class);

        if (response.getStatus() !=200 ) {
            throw new RuntimeException("Failed : HTTP error code : "
                 + response.getStatus());
        }

        System.out.println("Output from Server .... \n");
        
        String output = response.getEntity(String.class);
        System.out.println(output+"\n");

      } 
    
    catch (Exception e) {

        e.printStackTrace();

    }
    
}    }

现在,我期望看到的是我发送的消息以及存储在数组列表中的先前响应(暂时通过手动运行客户端多次发送)但总是以仅当前消息结束.

输出:

来自服务器的输出 ....

[{"id":"1","message":"hey there!"}]  

确切地说,当我多次运行我的客户端(或将 try 块置于循环中)时,我想要的输出如下,我无法得到。

来自服务器的输出 ....

[{"id":"1","message":"hey there!"},{"id":"1","message":"hey there!"},{"id":"1","message":"hey there!"},{"id":"1","message":"hey there!"}] .

【问题讨论】:

    标签: json rest arraylist


    【解决方案1】:

    JAXRS 中的资源不是单例的。这意味着对于每个请求,都会实例化 JSONMessages 类。所以你丢失了属性list 的内容。将其更改为静态可以解决您的问题。

    有一个注解Singleton 来改变这种行为。在这种情况下,资源将作为单例进行管理,而不是在请求范围内。这是一个示例:

    @Singleton
    @Path("/json/messages")
    public class JSONMessages {
        (...)
    }
    

    否则,请注意列表中的并发访问。有关详细信息,请参阅此问题:java concurrent Array List access

    希望对你有帮助 蒂埃里

    【讨论】:

      猜你喜欢
      • 2014-10-30
      • 2014-03-03
      • 1970-01-01
      • 2018-07-08
      • 2017-04-22
      • 1970-01-01
      • 1970-01-01
      • 2017-01-15
      • 2016-04-02
      相关资源
      最近更新 更多