使用JSON的Restlet POST

时间:2010-01-09 11:08:41

标签: json post restlet

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

由于

6 个答案:

答案 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'