【问题标题】:How do I access the JSON body of a PUT request to a RESTlet如何访问对 RESTlet 的 PUT 请求的 JSON 正文
【发布时间】:2014-06-08 09:59:43
【问题描述】:

如果我将 JSON 对象放入我的 restlet,例如。

curl -X PUT -H "Content-Type: application/json" -d '{"email":"foo@baar"}' http://localhost:8888/api/exitems/5629499534213120

我如何检索原始 JSON,即。我的restlet中的{"email":"foo@baar"}部分?

更新

这是问题的背景......

我有一个控制器类,扩展了 ServerResource,它处理我的一个模型 POJO(Person)上的 REST CRUD 操作。在 update()(即 PUT)方法中,我被传递了一个实例化的 Person 对象,但我不知道我的 REST 客户端 PUT 了哪些字段。

  • 如果客户端 PUT 排除了一个属性(例如)familyName - 意为“不更新 familyName”,则它在 POJO 中为空。

  • 1234563

如何区分这两种情况?

【问题讨论】:

  • 你能详细说明你在服务器端有什么吗? ServerResource 子类?
  • 是的。 "公共类 ExitemController 扩展 ServerResource 实现 ExitemControllerInterface"

标签: restlet


【解决方案1】:

当您扩展 ServerResource 时,您可以调用 getRequestEntity() 来检索表示,或者在您的 @Post 注释 Java 方法上声明一个 Representation 参数。

更新

查看您更新的问题,您似乎没有正确使用 PUT 方法。随 PUT 请求传递的实体应包含目标资源的全新状态。

在您的情况下,您似乎只想进行部分更新。如果您确实需要这种级别的优化,您应该考虑使用 PATCH 方法。

【讨论】:

  • 然后我将如何获得 original JSON 正文。我可以将 getStream() 和 getText() 视为 Representation 的方法。是其中之一吗?
  • 是的,您可以使用它们(或直接使用 getReader()),或者更喜欢使用扩展中提供的 JacksonRepresentation 或 JsonRepresentation 来轻松解析 JSON。
  • 在我的控制器(扩展 org.restlet.resource.ServerResource)中,我正在尝试“println(getRequestEntity().getText())”,但它返回 null。如果我尝试使用 getStream() 获取流,那也是 null。
  • 你确定你没有在上游过滤器中使用过这个请求实体吗?内容是套接字绑定的,因此只能读取一次,除非您对其进行缓冲。
  • 我确定我已经使用了它(除非将它解析为我的模型对象之一使用它)。如果问的是“真正的”问题,也许会更容易,因为它开始听起来像是我走错了方向。我已经更新了问题 - 希望没问题。
猜你喜欢
  • 1970-01-01
  • 2010-11-06
  • 2015-03-20
  • 2011-06-13
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多