如何实现接受JSON帖子的Restlet函数? 我如何使用curl进行测试?
由于
答案 0 :(得分:10)
使用Restlet 2,您可以:
在@Post acceptRepresentation(Representation entity)
中测试实体媒体类型兼容性:
@Post
public Representation acceptRepresentation(Representation entity)
throws ResourceException {
if (entity.getMediaType().isCompatible(MediaType.APPLICATION_JSON)) {
// ...
}
// ...
}
或使用带有一个或两个参数的@Post
:
@Post("json") Representation acceptAndReturnJson(Representation entity) {
// ...
}
请参阅以下链接:
(使用Restlet 1,您需要测试实体的类型。)
答案 1 :(得分:8)
在编写此响应时(问题发生后2年),Restlet 2.1需要满足正确的依赖关系以正确使用和响应JSON。除了“Unsupported media type
”响应之外,关于内部发生的事情没有太多线索。
要激活JSON媒体类型,您需要将依赖项包含到org.restlet.ext.jackson
;如果你需要同时支持XML和JSON,你需要包括Jackson FIRST然后org.restlet.ext.xstream
,因为XStream也能够进行JSON表示,但是实现相当差(如restlet文档中所述,这是推荐的顺序restlet作者)。
然后,您实际上不需要在注释中包含媒体类型,您只需要在卷曲请求中包含正确的Content-Type
标题,即:
curl -X post -H "Content-Type: application/json" http://localhost:8080/login -d @login.json
login.json
包含实际的JSON请求。@Post
带注释的方法,接受LoginRequest
并使用LoginResponse
进行响应,两者都支持XML和JSON媒体类型我希望,这个答案可以帮助某个人。 : - )
答案 2 :(得分:6)
Daniel Vassallo链接的示例显示了使用表单发布的数据。这是发送JSON的方法:
@Post
public void acceptJsonRepresentation(JsonRepresentation entity) {
JSONObject json = null;
try {
json = entity.getJsonObject();
// business logic and persistence
} catch (JSONException e) {
setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
return;
}
}
用curl测试:
curl -X POST <your url> -H "Content-Type: application/json" -d '{"key" : "value"}'
curl命令中数据周围的单引号('')非常重要。
答案 3 :(得分:3)
以下是有关此旧问题的一些更新。 Restlet支持包含bean的方法签名。在这种情况下,Restlet将使用已注册的转换器尝试将接收的有效负载转换/填充到bean实例中。将内容发送到客户端时也是如此。
以下是处理请求POST
的方法示例:
public class TestServerResource extends ServerResource {
@Post
public void test(TestBean bean) {
System.out.println(">> bean = " + bean.getMessage());
}
}
bean可以简单地具有以下结构:
public class TestBean {
private String name;
private String message;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
要使工作成为这样的机制,您只需在类路径中添加扩展名Jackson(org.restlet.ext.jackson
)即可。相应的转换器将自动注册在引擎盖下。
卷曲请求很简单,必须指定要发送的数据
curl -X POST http://... -H "Content-Type: application/json" -d '{"name" : "myname","description":"my description"}'
希望它可以帮到你, 亨利
答案 4 :(得分:2)
这是一个通过POST接受JSON的Restlet的完整示例:
有关如何使用cURL测试RESTful Web服务的基本指南:
答案 5 :(得分:0)
curl -u uid:4c521655 -X POST -H "Content-Type: application/json" -d "type=Big&data="{\"name\":\"test\"}"" --dump-header headers 'http://localhost:8190/appli/add'