我知道我可以在Representation/RepresentationInfo上設置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