java – 如何使用Play 2.0路由绑定双参数
我正在学习Play 2.0(使用
Java API),并希望有一个double / float参数(位置坐标),像
http://myfooapp.com/events/find?latitude=25.123456&longitude=60.251253.
我可以通过获取参数为String并在控制器解析它们,但可以在这里使用自动绑定吗? 现在,我首先尝试一个双重值: GET /events/foo controllers.Application.foo(doublevalue: Double) 同 public static Result foo(Double doublevalue) { return ok(index.render("Foo:" + doublevalue)); } 我得到的是“没有QueryType绑定找到类型Double.尝试实现隐式QueryStringBindable为此类型. 我错过了已经提供的东西 我发现一些关于在http://julien.richard-foy.fr/blog/2012/04/09/how-to-implement-a-custom-pathbindable-with-play-2/上使用Scala制作自定义字符串查询字符串绑定器的说明 我试过的 我在包装机上实现了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; } } 并试图添加到项目/ Build.scala的主要: routesImport += "binders._" 但结果相同:“找不到类型为Double ….的QueryString绑定” >我还将路由签名更改为java.lang.Double,但这也没有帮助 解决方法
目前(在2.0版)中,Java绑定只适用于自递归类型.也就是说,类似于以下内容:
class Foo extends QueryStringBindable<Foo> { … } 因此,如果要定义java.lang.Double(它是现有类型的Java)的binder,则需要将其包装为自递归类型.例如: package util; public class DoubleW implements QueryStringBindable<DoubleW> { public Double value = null; @Override public Option<DoubleW> bind(String key,String[]> data) { String[] vs = data.get(key); if (vs != null && vs.length > 0) { String v = vs[0]; value = Double.parseDouble(v); return F.Some(this); } return F.None(); } @Override public String unbind(String key) { return key + "=" + value; } @Override public String javascriptUnbind() { return value.toString(); } } 那么你可以在你的应用程序中使用它: GET /foo controllers.Application.action(d: util.DoubleW) public static Result action(DoubleW d) { … } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |