我有一个 ReSTLet 服务,如下所示:
@POST
@Produces("application/json")
public String processImmediately(String JSON) {
//...
}
目的是通过 POST 传递 JSON 字符串。我使用的参数(字符串 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());
如何在我的服务方法中使用它?我什至无法确定正确的类型(例如请求、表单)。 我是否还需要该方法参数或者这是一个替代品?
谢谢
最佳答案
您的端点正在传递整个查询字符串,因为您没有指定要使用其中的哪一部分。要仅将 JSON
查询参数绑定(bind)到您的方法,请尝试如下操作:
@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);
// ....
}
<小时/>
* 编辑*
您可以根据预期的内容类型选择方法参数绑定(bind)。因此,例如,如果您的 Content-Type 是 application/x-www-form-urlencoded
(表单数据),那么您将绑定(bind) @FormParam。或者,对于 Content-Type application/json
您可以简单地将请求正文作为字符串使用。
@POST
@Path("/")
@Consumes("application/json")
@Produces("application/json")
public String processImmediately(String json) {
System.out.printf("Incoming JSON, decoded: %s\n", json);
// ....
}
如果您在使用第二种方法时发现有 URL 编码的数据,那么您的客户端将其数据错误地传递到服务器。
关于java - ReSTLet:获取请求的参数键和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9292467/