Restlet:获取请求的参数键和值

时间:2012-02-15 11:27:23

标签: java json restlet

我有一个看起来像这样的Restlet服务:

@POST
@Produces("application/json")
public String processImmediately(String JSON) {

    //...
}

目的是通过POST传递JSON字符串。我使用的参数(String JSON)确实包含整个URL参数,例如

JSON=%7B%22MessageType%22%3A%22egeg%22%7D&SomeValue=XY

我想知道如何解析这个问题。在Restlet网站上,我发现了以下内容:

http://wiki.restlet.org/docs_2.0/13-restlet/27-restlet/330-restlet/58-restlet.html

Form form = request.getResourceRef().getQueryAsForm();
for (Parameter parameter : form) {
System.out.print("parameter " + parameter.getName());
System.out.println("/" + parameter.getValue());

如何在我的服务方法中使用它?我甚至无法确定正确的类型(例如请求,表单)。 我是否需要更长时间的方法参数,还是需要替换?

由于

1 个答案:

答案 0 :(得分:2)

您的端点正在传递整个查询字符串,因为您没有指定要使用哪个部分。要将JSON查询参数仅绑定到您的方法,请尝试以下操作:

@POST
@Path("/")
@Consumes("application/x-www-url-formencoded")
@Produces("application/json")
public String processImmediately(@FormParam("JSON") String json) {
    System.out.printf("Incoming JSON, decoded: %s\n", json);
    // ....
}

*编辑*

您可以根据预期的内容类型选择方法参数绑定。因此,例如,如果您的Content-Type是application/x-www-form-urlencoded(表单数据),那么您将绑定@FormParam。或者,对于Content-Type application/json,您可以简单地将请求主体作为String使用。

@POST
@Path("/")
@Consumes("application/json")
@Produces("application/json")
public String processImmediately(String json) {
    System.out.printf("Incoming JSON, decoded: %s\n", json);
    // ....
}

如果您在使用第二种方法时发现您有URL编码数据,那么您的客户端会错误地将其数据传递给服务器。