2015-10-16 58 views
-1

我有这样一个类:玻璃鱼java我可以通过获取请求发送对象吗?

class Customer { 
    private int id; 
    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 
} 

,我有一个玻璃鱼Web服务:

我想知道这是可能使用得到

发送客户对象(我知道我可以在后期做到这一点,但在得到...我不知道)

这是我试过的:

@GET 
    @Path("/test") 
    @Produces(MediaType.TEXT_PLAIN) 
    @Consumes(MediaType.APPLICATION_OCTET_STREAM) 
    public String test(@QueryParam("customer") Customer customer) { 
     return "Done " + customer.getId(); 
    } 

然后我这样称呼它:

..../test?id=4&name=william 

我知道这是错的,但我不知道正确的方式,我不知道如果用得到

甚至有可能
+0

应该'name'是'customer' –

+0

@DavidPulse我不这么认为,因为客户是一个对象,这就是我所要求的实际内容 –

+0

请阅读关于REST基础知识的一些信息...您期望什么从通过HTTP发送一个Java对象...你认为“下载器”会得到什么? – unwichtich

回答

2

@QueryParam应该用于每个单独的参数。例如

/cusomters?name=hello&id=1 

@GET 
@Produces(...) 
public Response get(@QueryParam("name") String name, 
        @QueryParam("id") int id) 

如果你想要把它变成一个bean,你可以使用@BeanParam,它允许你把任意@XxxParam s转换的bean。例如

class Customer { 
    @QueryParam("name") 
    private String name; 
    @QueryParam("id") 
    private int id; 
    // getters/setters 
} 

@GET 
public Response get(@BeanParam Customer customer) 

但请记住REST原则。要创建客户资源,其用POST完成。也要考虑安全问题。你不希望URL中的私人用户信息。

+0

没错。我只是不知道如何编码。 –

+0

在这种情况下,@consum注释是什么? –

+0

@MarcoDinatsoli您不使用'@ Consumes'进行GET。没有身体。 '@ Consumes'只是说你可以处理的实体主体类型(主要是POST/PUT)。由于没有身体,不需要注释。你的所有数据都在URL中,而不是正文 –