私は Play 2.0 (Java API を使用) を学んでおり、 http://myfooapp.com/events/find?latitude=25.123456&longitude=60.251253のような double/float パラメーター (位置座標用) が必要です。
パラメーターを文字列として取得し、コントローラーなどで解析することでこれを行うことができますが、ここで自動バインドを使用できますか?
ここで、最初に double 値を 1 つだけ持つようにしました。
GET /events/foo controllers.Application.foo(doublevalue: Double)
と
public static Result foo(Double doublevalue) {
return ok(index.render("Foo:" + doublevalue));
}
私が得たのは、「タイプ Double の QueryString バインダーが見つかりませんでした。このタイプの暗黙的な QueryStringBindable を実装してみてください。」
すでに提供されているものを見逃していませんか? または、Double を解析するカスタム QueryStringBindable を作成する必要がありますか?
http://julien.richard-foy.fr/blog/2012/04/09/how-to-implement-a-custom-pathbindable-with-playで、Scala を使用してカスタム文字列クエリ文字列バインダーを作成する手順をいくつか見つけました。-2/
私が試したこと:
パッケージ バインダーに DoubleBinder を実装しました。
import java.util.Map;
import play.libs.F.Option;
import play.mvc.QueryStringBindable;
public class DoubleBinder implements QueryStringBindable<Double>{
@Override
public Option<Double> bind(String key, Map<String, String[]> data) {
String[] value = data.get(key);
if(value == null || value.length == 0) {
return Option.None();
} else {
return Option.Some(Double.parseDouble(value[0]));
}
}
@Override
public String javascriptUnbind() {
// TODO Auto-generated method stub
return null;
}
@Override
public String unbind(String key) {
// TODO Auto-generated method stub
return null;
}
}
そして、それを project/Build.scala のメインに追加しようとしました:
routesImport += "binders._"
しかし、同じ結果:「Double型のQueryStringバインダーが見つかりません....」
- ルーティング署名も java.lang.Double に変更しましたが、どちらも役に立ちませんでした
- また、DoubleBinder を変更して、(play.mvc.QueryStringBindable の代わりに) play.api.mvc.QueryStringBindable を実装するように変更しましたが、ルーティング署名で Double と java.lang.Double の両方を使用しましたが、まだ助けにはなりません