【问题标题】:Get values by POST in Restlet framework在 Restlet 框架中通过 POST 获取值
【发布时间】:2014-02-13 16:25:15
【问题描述】:

我正在尝试使用Restlet framework 获取 POST 发送的参数,但我找不到方法。

这是我使用 GET 所做的工作:

   @Get
   public StringRepresentation represent() {
      String search = getQuery().getValues("search");
      String folder = getQuery().getValues("folder");

      LinkedHashMap<String, String> list = search(search, folder);
      return new StringRepresentation(JSONObject.toJSONString(list), MediaType.APPLICATION_JSON);
   }

我应该怎么做才能从 POST 中获取数据?


更新 尝试此操作后仍然无法获得 415 Unsupported Media Type

   @Post("json")
   public StringRepresentation represent(Representation entity) {
       final Form form = new Form(entity);
       String name = form.getFirstValue("search");

      return new StringRepresentation(name, MediaType.APPLICATION_JSON);
   }

有关更多信息,我正在使用 cURL 通过 PHP 发出 POST 请求。


更新 2 通过删除 ("json") 我不再收到错误消息,但 name 变量为空。


更新 3 这是我正在使用的 PHP 代码:

public function restful(){
    $result = $this->callAPI('POST', 'http://localhost:8182/xxxx', array('search'=> 'demo', 'folder' => 'xxxxxx'));
    print_r($result);
    die();
}


// Method: POST, PUT, GET etc
// Data: array("param" => "value") ==> index.php?param=value

public function callAPI($method, $url, $data = false){
    $curl = curl_init($url);

    switch ($method)
    {
        case "POST":
            curl_setopt($curl, CURLOPT_POST, 1);

            if ($data){
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            }
            break;
        case "PUT":
            curl_setopt($curl, CURLOPT_PUT, 1);
            break;
        default:
            if ($data){
                $url = sprintf("%s?%s", $url, http_build_query($data));
            }
    }

    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,  2);
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

    $curl_response = curl_exec($curl);
    curl_close($curl);

    return $curl_response;
}

【问题讨论】:

  • 也许使用“@Post”而不是“@Get”?还是我误解了这个问题?
  • 我已经尝试过了,但似乎还不够。我收到一条消息说Unsupported Media Type
  • 错误类型 415?很多人都有同样的问题……你能详细点吗?

标签: java restlet restlet-2.0


【解决方案1】:

你可以这样做

@Post("json")
public void someMethod(Representation rep){...}

您可以将 json 替换为您可以处理的内容类型。

如果帖子来自一个简单的 html 表单,那么您可以从表示中获取 Form 对象并从中提取参数。

@Post
public void someMethod(Representation entity){
  final Form form = new Form(entity);
  String name = form.getFirstValue("name"));
}

请注意,您还可以从查询字符串构造 Form 对象。

【讨论】:

  • 那我如何获取参数呢?
  • 仍然有同样的问题。在您回复后,我正在用我正在尝试的内容更新我的问题。
  • 你试过没有(“json”)吗?那应该采取任何职位。你在发什么?
  • 没有(json) 我不再收到错误消息,但变量名是空的。
  • 最后问题出在我通过 PHP 通过 POST 发送变量的方式上。 IT 不应位于数组中,而应位于param1=value&amp;param2=value2 类型的字符串中。当您帮助我找到解决方案时,我会接受这个答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 2014-03-15
  • 2016-09-20
  • 2015-04-13
  • 1970-01-01
相关资源
最近更新 更多