使用 Restlet ClientResource 无法将实体发送到 Restlet Service
Using Restlet ClientResource cannot send entity to Restlet Service
我在 Restlet 客户端调用工作休息服务时遇到问题:
final ClientResource resource = new ClientResource(Routes.PUBLIC_STORE_API);
resource.setOnResponse(new Uniform() {
public void handle(Request request, Response response) {
try {
Status status = response.getStatus();
if(!Status.isError(status.getCode())){
String jsonResponse = response.getEntity().getText();
} else {
// Handle error
}
} catch (Exception e){
callback.failure(new Throwable(e.getMessage()));
}
}
});
JsniHelper.consoleLog("Adding object id=" + id + " type=" + type + " data=" + jsonObject);
resource.getReference().addQueryParameter("type", type);
resource.getReference().addQueryParameter("id",id);
resource.post(jsonObject, MediaType.APPLICATION_JSON);
在对象上方的日志点是一个有效的 JSON 字符串。
Restlet ServerResource
能够同时获得 id
和 type
字符串,但是实体始终是 null
:
@Post("json")
public Representation add(Representation entity){ // omitted }
我尝试使用 CURL,Rest 服务能够正确处理 JSON 字符串。
我在 GWT 中的代码可能有什么问题?
更新:我在 POM 中有这个
<dependency>
<groupId>org.restlet.gae</groupId>
<artifactId>org.restlet.ext.gwt</artifactId>
<version>2.2-RC3</version>
</dependency>
为了进行此调用 运行,请执行以下操作:
- 将 GWT 版框架的 Json 扩展 (org.restlet.ext.json.jar) 添加到您的项目中
将以下依赖项添加到您的 GWT 模块
然后按如下方式更新您的代码:
resource.post(新Json表示(MediaType.APPLICATION_JSON,jsonObject));
我注意到如果您发送表示而不是对象,它会起作用。
主要问题是当处理一个对象时,核心模块没有如何序列化它。在 JVM 中,我们可以插入一个服务来发现自动将 bean 转换为表示的可用转换器,我们无法使用 GWT 实现此目的。
话虽如此,我认为您可以通过使用 beans 以更简单的方式集成您的客户端和服务器代码。 GWT 客户端代码可以使用特定的 GWT 序列化格式进行通信,任何其他客户端代码使用 JSON.
我在 Restlet 客户端调用工作休息服务时遇到问题:
final ClientResource resource = new ClientResource(Routes.PUBLIC_STORE_API);
resource.setOnResponse(new Uniform() {
public void handle(Request request, Response response) {
try {
Status status = response.getStatus();
if(!Status.isError(status.getCode())){
String jsonResponse = response.getEntity().getText();
} else {
// Handle error
}
} catch (Exception e){
callback.failure(new Throwable(e.getMessage()));
}
}
});
JsniHelper.consoleLog("Adding object id=" + id + " type=" + type + " data=" + jsonObject);
resource.getReference().addQueryParameter("type", type);
resource.getReference().addQueryParameter("id",id);
resource.post(jsonObject, MediaType.APPLICATION_JSON);
在对象上方的日志点是一个有效的 JSON 字符串。
Restlet ServerResource
能够同时获得 id
和 type
字符串,但是实体始终是 null
:
@Post("json")
public Representation add(Representation entity){ // omitted }
我尝试使用 CURL,Rest 服务能够正确处理 JSON 字符串。
我在 GWT 中的代码可能有什么问题?
更新:我在 POM 中有这个
<dependency>
<groupId>org.restlet.gae</groupId>
<artifactId>org.restlet.ext.gwt</artifactId>
<version>2.2-RC3</version>
</dependency>
为了进行此调用 运行,请执行以下操作:
- 将 GWT 版框架的 Json 扩展 (org.restlet.ext.json.jar) 添加到您的项目中
将以下依赖项添加到您的 GWT 模块
然后按如下方式更新您的代码:
resource.post(新Json表示(MediaType.APPLICATION_JSON,jsonObject));
我注意到如果您发送表示而不是对象,它会起作用。 主要问题是当处理一个对象时,核心模块没有如何序列化它。在 JVM 中,我们可以插入一个服务来发现自动将 bean 转换为表示的可用转换器,我们无法使用 GWT 实现此目的。
话虽如此,我认为您可以通过使用 beans 以更简单的方式集成您的客户端和服务器代码。 GWT 客户端代码可以使用特定的 GWT 序列化格式进行通信,任何其他客户端代码使用 JSON.