import dispatch._
import com.google.appengine.api.urlfetch._
import java.net.URL
object DispatchHelper {
  /**
   * convert dispatch.Request -> String
   */
  implicit def r2s(r: Request) = {
    r.host.get + r.req.getRequestLine.getUri
  }
  /**
   * convert dispatch.Request -> com.google.appengine.api.urlfetch.HTTPRequest
   */
  implicit def dispatch2gae(r: Request): HTTPRequest = {
   val isPost = r.req.getMethod == "POST"
   val g = new HTTPRequest(new URL(r), if (isPost) HTTPMethod.POST else HTTPMethod.GET, FetchOptions.Builder.withDeadline(10))
   r.req.getAllHeaders.foreach(h => {g.addHeader(h); println(h)})
   r.req match {
    case p: org.apache.http.client.methods.HttpPost =>
     val payload = new java.io.ByteArrayOutputStream
     p.getEntity.writeTo(payload)
     g.setPayload(payload.toByteArray)
     println(p.getEntity.getContentType)
    case _ =>
   }
   g
  }
}
こんな感じでimplicit defを宣言してimport DispatchHelper._すれば、dispatchでリクエストを作って、URLFetchService.fetch()の引数にそのまま渡せばOK。
dispatchの解説はこちら

