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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage