TaskQueue POST请求,带有文件或byte []作为参数(Java)

时间:2012-03-15 13:50:40

标签: google-app-engine playframework

是否可以使用与String不同类型的参数调用任务队列? 我的代码目前看起来像这样,但队列中的代码永远不会到达:( Playframework coding)

public static void addOrUpdateShops(byte[] xmlFile) {
  checkUserExists();
  QueueFactory.getDefaultQueue().add(withUrl("/DataTransferController/addOrUpdateShopz").param( "xmlFile", xmlFile).method(TaskOptions.Method.POST));
  renderText("Added to queue");
}

public static void addOrUpdateShopz(byte[] xmlFile) throws Exception {
  Logger.debug("Running queue task (addOrUpdateShopszz)");
  ShopModelUtilities.addShops(xmlFile);
}

THX

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:3)

Peter's answer是正确的,但此外,您无法发送同时定义了payload和param的POST请求。尝试同时设置两个值将触发:

java.lang.IllegalArgumentException: 
    Message body and parameters may not both be present; 
    only one of these may be supplied

根据您的代码示例,如果要在TaskQueue请求上发送byte []有效负载,则必须从TaskOption的构建器链中删除.param( "xmlFile", xmlFile)

答案 2 :(得分:0)

简短的回答是不,它是HTTP,所以只传递字符串。很长的答案是肯定的,你可以序列化一个对象,然后使用ObjectInputStream来读取它并将其转换回一个对象,但你必须手动执行或者使用像Jersey(jax-rs)或json reader这样的东西来自动反序列化它回到了一个对象。

答案 3 :(得分:0)

查看调用延迟函数 - 更多的有效负载灵活性。记住,对TQ的直接调用有一个10k的限制,如果你的有效载荷类似于jpeg,你可以快速命中。 http://code.google.com/appengine/articles/deferred.html