有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用Restlet ClientResource的java无法将实体发送到Restlet服务

我对Restlet客户端调用working-rest服务有问题:

    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能够同时获取idtype字符串,但是实体始终是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>

共 (1) 个答案

  1. # 1 楼答案

    要运行此呼叫,请执行以下操作:

    • 将从GWT版本获取的框架的Json扩展(org.restlet.ext.Json.jar)添加到项目中
    • 将以下依赖项添加到GWT模块中

    • 然后按如下方式更新代码:

      资源。post(新的JsonRepresentation(MediaType.APPLICATION_JSON,jsonObject))

    我注意到,如果你发送一个表示,而不是一个对象,它是有效的。 主要问题是,在处理对象时,核心模块不知道如何序列化它。在JVM中,我们可以插入一个发现可用转换器的服务,这些转换器可以自动将bean转换为表示形式,但我们无法使用GWT实现这一点

    话虽如此,我认为只需使用bean,就可以更轻松地集成客户机和服务器代码。GWT客户机代码可以使用特定的GWT序列化格式进行通信,任何其他客户机代码都可以使用JSON

    看看这个代码:http://restlet.com/technical-resources/restlet-framework/guide/2.3/introduction/first-steps/first-application