2

私はRESTとRESTletの両方にまったく慣れていません.昨夜はすべてを立ち上げて通信しましたが、今朝気づいたことは、サーバーに渡すものはすべて常にnullになっていることです.

サンプルアプリと同じように、私は次のものを持っています - User Objectify エンティティ (id、emailAddress、および version)、および RESTUserProxy オブジェクト (id、emailAddress) - Objectify Entities を返して、返さなかった後に渡すことができるかどうかは最初はわかりませんでしたProxyオブジェクトに切り替えたものを見ることができます-この方法で動作させることができれば、元に戻してみます

フロントエンドは次のとおりです。

public interface RESTUserResourceProxy extends ClientProxy {

  @Get
  public void find(String emailAddress, Result<RESTUserProxy> callback);

  @Put
  public void persist(RESTUserProxy user, Result<Void> callback);

  @Delete
  public void delete(RESTUserProxy user, Result<Void> callback);
}

バックエンドコードは次のとおりです(これは現在非常に醜いです-何かを見ようとして、大量のsysoutを入れようとして少しイライラしました)

public class RESTUserServerResource extends ServerResource implements RESTUserResource {

  private final UserDao userDao;

  public RESTUserServerResource() {
    System.out.println("CREATED USER RESOURCE IMPL");
    userDao = new UserDao();
  }

  @Override
  @Get
  public RESTUserProxy find() {
    System.out.println("reference = " + getReference());
    Form queryParams = getReference().getQueryAsForm();
    System.out.println("query params = " + queryParams);
    System.out.println("query = " + getQuery());
    System.out.println("query string = " + getQuery().getQueryString());
    String searchQuery = (String) getRequest().getAttributes().get("searchQuery");
    System.out.println("search query = " + searchQuery) ;
    return null;
//    if (emailAddress == null) {
//      return null;
//    }
//    System.out.println("user resource impl find [" + emailAddress + "]");
//    final User user = userDao.find(emailAddress.getText());
//    if (user != null) {
//      System.out.println("found user ");
//      return new RESTUserProxy(user.getId(), user.getEmailAddress());
//    } else {
//      System.out.println("found absolutely nothing");
//      return null;
//    }
  }

  @Override
  @Put
  public void persist(RESTUserProxy userProxy) {
    System.out.println("user proxy = " + userProxy);
    if (userProxy == null) {
      return;
    }
    final User user = userDao.find(userProxy.getId());
    user.setEmailAddress(userProxy.getEmailAddress());
    user.setId(userProxy.getId());
    userDao.persist(user);
  }

  @Override
  @Delete
  public void delete(RESTUserProxy userProxy) {
    final User user = userDao.find(userProxy.getId());
    userDao.delete(user);
  }
}

私が問題を抱えているのは、すべてがnullとして通過することです-ここでの他の多くの回答は、パラメーターを取得するためのクエリを取得すると言われています-しかし、ここではクエリはnullです

以下は、find と persist を呼び出した出力です。

reference = http://127.0.0.1:8888/users/123
query params = []
query = []
query string = 
search query = null

私はここで何かばかげたことをしていると確信しています。今はどうすればいいのかわかりません。私が間違っていることについての助けをいただければ幸いです。

4

1 に答える 1

1

これは、GAE がチャンク エンコーディングをサポートしていないためです。ここで回避策を参照してください: http://wiki.restlet.org/docs_2.1/13-restlet/21-restlet/318-restlet/303-restlet.html#dsy303-restlet_gwt

于 2012-07-09T14:55:41.897 に答える