I'm learning myself Play 2.0 (Java API used) and would like to have a double/float parameter (for location coordinates), something like http://myfooapp.com/events/find?latitude=25.123456&longitude=60.251253.
I can do this by getting the parameters as String and parsing them at controller etc but can I use automatic binding here?
Now, I first tried simply having one double value:
GET /events/foo controllers.Application.foo(doublevalue: Double)
with
public static Result foo(Double doublevalue) {
return ok(index.render("Foo:" + doublevalue));
}
What I got was "No QueryString binder found for type Double. Try to implement an implicit QueryStringBindable for this type."
Have I missed something already provided or do I have to make a custom QueryStringBindable that parses Double?
I found some instructions on making a custom string query string binder with Scala at http://julien.richard-foy.fr/blog/2012/04/09/how-to-implement-a-custom-pathbindable-with-play-2/
What I tried:
I implemented DoubleBinder at package binders:
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;
}
}
And tried to add it to project/Build.scala's main:
routesImport += "binders._"
but same result : "No QueryString binder found for type Double...."
- I also changed the routing signature to java.lang.Double but that didn't help either
- I also changed the DoubleBinder to implement play.api.mvc.QueryStringBindable (instead of play.mvc.QueryStringBindable) both with Double & java.lang.Double at the routing signature but no help still