java - ReSTLet:获取请求的参数键和值

标签 java json restlet

我有一个 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/

相关文章:

java - 同构词

java - Spring Boot 应用程序 Tomcat 服务器未运行

java - ReSTLet:使用多个参数发布

java - Android 上的多处理

java - 如何对不可变类实例之间的循环建模?

java - 如何使用java读取S3中存在的JSON文件

java - 将 JSONArray 转换为 HashMap 并匹配

java - JSON 数据错误地填充 textViews

java - ReSTLet 框架中基于表单的身份验证

google-app-engine - AppEngine 的 RESTFul 服务框架