如何使用符号创建自定义客户端RESTLET请求和/或响应实体Java对象?

时间:2014-12-22 18:06:36

标签: rest restlet

是否有一个很好的教程(或问题和答案)来说明如何使用符号创建自定义RESTLET请求和/或响应实体Java对象?

我有一个RESTLET服务器应用程序,它具有明确定义的方法(即GET,PUT,POST等)和响应。我想编写一个连接到它的Java客户端代码片段,如果可能的话,使用JSON注释来解析RESTLET请求和RESTLET客户端的响应。到目前为止我在网上找到的所有内容都是关于编写RESTLET服务,而不是关于客户端。

我已经能够使用“org.restlet.resource.ClientResource”作为连接器客户端来连接到URL并解析出一个响应。但是我想用一种更通用的方法来处理Java POJO对象,该对象使用@notations(即@GET @POST)定义的方法和对象来发送和接收客户端的请求和响应。

我现在有类似的东西:

ClientResource clientResource = new ClientResource(url);

Request request = new Request(Method.POST, url);

clientResource.setRequest(request);
Form form = new Form();

form.set("foo", "barValue");

org.restlet.representation.Representation   response = clientResource.post(form, MediaType.APPLICATION_JSON);
Representation responseEntity = clientResource.getResponseEntity();

JsonRepresentation jsonRepresentation = new JsonRepresentation(responseEntity);

JSONObject jsonObject = jsonRepresentation.getJsonObject();
String[] names = JSONObject.getNames(jsonObject);

if (jsonObject.has("errorString"))
{
    String error = jsonObject.optString("errorString");
}

2 个答案:

答案 0 :(得分:0)

我认为你寻找的是转换器概念。后者在客户端和服务器端都受支持,旨在将表示转换为POJO。您可以注意到,您需要使用ClientResource来利用此功能。

您可以查看扩展名org.restlet.extract.jackson中的Jackson。这将有助于您实现自己的。

希望它会有所帮助!

答案 1 :(得分:0)

如果要在Restlet中使用带注释的接口,只需按如下所述定义接口:

public TestResource {
  @Get
  List<Element> getElements();
  @Post
  Element addElement(Element element);
}

这对应于具有HTTP方法GET和POST的服务器资源,并处理与类Element结构相同的数据结构(无论使用何种技术:JSON,XML,YAML等)。

例如:

public class Element {
  private String id;
  private String name;
  private int age;
  // Setters and getters
 (...)
}

对应内容:

{
  "id": "myid",
  "name": "myname",
  "age": 35
}

此接口可以在ClientResource类中与方法换行一起使用,如下所述:

 ClientResource cr = new ClientResource("http://(...)/myresource");
 ElementResource resource = cr.wrap(ElementResource.class);
 // GET
 List<Element> elements = resource.getElements();
 // POST
 Element newElement = new Element();
 newElement.setId("...");
 (...)
 Element addedElement = resource.addElement(newElement);

你可以注意到表示数据/ POJO是由Restlet完成的。所以你需要有一个扩展来做到这一点。例如扩展名org.resdtlet.ext.jackson将Jackson用于JSON或XML或YAML。

希望它有所帮助。 亨利