@QueryParam没有设置值

时间:2016-05-26 16:46:38

标签: web-services jax-rs

我的网络服务如下:

@POST
@Path("/push")
@Consumes(MediaType.APPLICATION_JSON)
public String push(@QueryParam("comment") String comment,
                   @QueryParam("type") String type){
     // do something
}

我的请求正文是:

{
    "comment" : "comment1",
    "type" : "type1"
}

在发出适当的帖子请求时调用我的网络服务,但参数commenttype的值为null。这有什么不对?

1 个答案:

答案 0 :(得分:2)

您将查询参数与Post请求有效负载混淆。

@QueryParameter 查询参数从请求URI查询参数中提取,并使用方法参数参数中的javax.ws.rs.QueryParam批注指定。

查询参数是可选的,如果您不设置它们,它们将被设置为null。

如果你想保留'评论&键入'作为查询参数,您应该按如下方式传递它们:

http://<HOST:port>/push?comment=comment1&type=type1

Post方法 Payload 是您将与POST请求一起发送的内容。

在你的情况下,你传递'comment'和'type'作为有效载荷,但它没有映射到任何东西。

如果要接收有效负载,映射到对象,则应进行一些更改。

首先,创建一个用@XmlRootElement

注释的类
@XmlRootElement    
class MyMessage{
String comment;
String type;
//add getter and setter
}

,您的其他API入口点将如下所示:

@POST
@Path("/push")
@Consumes(MediaType.APPLICATION_JSON)
public String push(MyMessage message){
     String comment = message.getComment()
     String type = message.getType()
     // do something
}