So binden Sie Double-Parameter mit Play 2.0-Routing
Ich lerne selbst Play 2.0 (Java API verwendet) und möchte einen double / float-Parameter (für Ortskoordinaten) haben, so etwas wiehttp://myfooapp.com/events/find?latitude=25.123456&longitude=60.251253.
Ich kann dies tun, indem ich die Parameter als String erhalte und sie auf dem Controller usw. analysiere. Kann ich hier die automatische Bindung verwenden?
Jetzt habe ich zuerst versucht, einfach einen doppelten Wert zu haben:
<code>GET /events/foo controllers.Application.foo(doublevalue: Double) </code>
mit
<code>public static Result foo(Double doublevalue) { return ok(index.render("Foo:" + doublevalue)); } </code>
Was ich bekam, war"Für den Typ Double wurde kein QueryString-Ordner gefunden. Versuchen Sie, ein implizites QueryStringBindable für diesen Typ zu implementieren."
Habe ich etwas verpasst, das bereits bereitgestellt wurde, oder muss ich eine benutzerdefinierte QueryStringBindable erstellen, die Double analysiert?
Ich habe Anweisungen zum Erstellen eines benutzerdefinierten Binders für Zeichenfolgenabfragen mit Scala unter gefundenhttp://julien.richard-foy.fr/blog/2012/04/09/how-to-implement-a-custom-pathbindable-with-play-2/
Was ich versucht habe:Ich habe DoubleBinder bei Paketbindern implementiert:
<code>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; } } </code>
Und versuchte es zu project / Build.scala's main hinzuzufügen:
<code>routesImport += "binders._" </code>
aber das gleiche Ergebnis: "Kein QueryString-Ordner für Typ Double ... gefunden."
Ich habe auch die Routing-Signatur in java.lang.Double geändert, aber das hat auch nicht geholfenIch habe auch den DoubleBinder geändert, um play.api.mvc.QueryStringBindable (anstelle von play.mvc.QueryStringBindable) zu implementieren, beide mit Double & java.lang.Double bei der Routing-Signatur, aber noch keine Hilfe