12

如何实现接受 JSON 帖子的 Restlet 函数?以及如何使用 curl 进行测试?

谢谢

4

6 回答 6

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") 表示 acceptAndReturnJson(Representation entity) { // ... }

请参阅以下链接:

(使用 Restlet 1,您需要测试实体的类型。)

于 2010-06-24T23:12:46.453 回答
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 请求中包含正确的标头,即:

curl -X post -H "Content-Type: application/json" http://localhost:8080/login -d @login.json
  • 其中login.json包含实际的 JSON 请求。
  • login 是接受和响应的带@Post注释的方法,都支持 XML 和 JSON 媒体类型LoginRequestLoginResponse

我希望,这个答案会在某个时候对某人有所帮助。:-)

于 2012-07-31T11:42:09.370 回答
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 命令中数据周围的单引号 ('') 很重要。

于 2011-01-24T18:05:43.963 回答
4

以下是关于这个老问题的一些更新。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;
    }
}

要使这种机制起作用,您只需org.restlet.ext.jackson在类路径中添加扩展名 Jackson ( )。相应的转换器将在后台自动注册。

curl请求很简单,需要指定发送的数据

curl -X POST http://... -H "Content-Type: application/json" -d '{"name" : "myname","description":"my description"}'

希望它可以帮助你,蒂埃里

于 2015-04-22T12:37:22.800 回答
2

这是一个通过 POST 接受 JSON 的 Restlet 的完整示例:

以及如何使用 cURL 测试 RESTful Web 服务的基本指南:

于 2010-01-09T11:11:03.967 回答
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'
于 2014-05-22T11:37:35.130 回答