我有一个看起来像这样的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());
如何在我的服务方法中使用它?我甚至无法确定正确的类型(例如请求,表单)。 我是否需要更长时间的方法参数,还是需要替换?
由于
答案 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编码数据,那么您的客户端会错误地将其数据传递给服务器。