是否有一个很好的教程(或问题和答案)来说明如何使用符号创建自定义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");
}
答案 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。
希望它有所帮助。 亨利