Representation/Repre sentationInfoでETAGおよびLastModifiedプロパティを設定できることはわかっています。 しかし、私は単純なリソースは次のように実装しました:ServerResourceから送信された表現上でETAG/LastModifiedを設定する
public class AccountServerResource extends ServerResource implements AccountResource {
private static Logger log = Logger.getLogger(AccountServerResource.class.getName());
@Override
public Account retrieve() {
User user = getClientInfo().getUser();
AccountDAO dao = new AccountDAO();
Account ret = dao.getAccountByEmail(user.getEmail());
log.info("retrieved " + ret);
// getResponse().getEntity() == null at this point !!!
// ---> cannot do this : getResponse().getEntity().setModificationDate(ret.getLastModified());
return ret;
}
}
を表現はまだこの時点での応答に添付されていません。 いつETAG/LastModifiedタグを設定しますか?
ここで推奨される方法は何ですか?
私は運がなく、このアプローチを試みた --- --- UPDATE:このような
@Override
public Account retrieve() {
User user = getClientInfo().getUser();
AccountDAO dao = new AccountDAO(user.getNamespace());
AccountDAO dao = new AccountDAO();
Account ret = dao.getAccountByEmail(user.getEmail());
log.info("retrieved " + ret);
setOnSent(new StrongEtagCallback<Account>(ret));
return ret;
}
をそしてStrongEtagCallbackの実装:
public class StrongEtagCallback<T extends DomainResource> implements Uniform {
private static SimpleDateFormat df = new SimpleDateFormat("ddMMyyyyHHmmssSSS");
private DomainResource d;
public StrongEtagCallback(T domainResource) {
d = domainResource;
}
@Override
public void handle(Request request, Response response) {
String eTag = d.getClass().getSimpleName() + "-" + d.getId() + "-" + df.format(d.getLastModified());
response.getEntity().setTag(new Tag(eTag, false));
}
}
すべての私のエンティティをそれらがIDとLastModified日付を持つことを要求するDomainResourceを実装します。
しかし、動作しません。私は本当にこれがうまくいくと思っていました、それはとてもエレガントです!
StrongEtagCallbackが呼び出されていますが、ETAGはエンティティのサーバー側を設定しています。私のWiresharkと私のGWTクライアントは、応答の応答にE-TAGヘッダーを見ます。ダイビングは今より深い。
あなたが正しいですうん、私の答えは時代遅れです。 – koma