我正在学习 Play 2.0(使用 Java API)并且想要一个 double/float 参数(用于位置坐标),例如.
我可以通过获取字符串形式的参数并在控制器等处解析它们来做到这一点,但是我可以在这里使用自动绑定吗?
现在,我首先尝试简单地使用一个双精度值:
GET /events/foo controllers.Application.foo(doublevalue: Double)
with
public static Result foo(Double doublevalue) {
return ok(index.render("Foo:" + doublevalue));
}
我得到的是“找不到 Double 类型的 QueryString 绑定器。尝试为此类型实现隐式 QueryStringBindable。”
我是否错过了已经提供的东西或者
我必须制作一个解析 Double 的自定义 QueryStringBindable 吗?
我发现了一些关于使用 Scala 制作自定义字符串查询字符串绑定器的说明,网址为http://julien.richard-foy.fr/blog/2012/04/09/how-to-implement-a-custom-pathbindable-with-play-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 的 main 中:
routesImport += "binders._"
但结果相同:“没有找到 Double 类型的 QueryString 绑定器......”
- 我还将路由签名更改为 java.lang.Double 但这也没有帮助
- 我还更改了 DoubleBinder 以在路由签名处使用 Double 和 java.lang.Double 实现 play.api.mvc.QueryStringBindable (而不是 play.mvc.QueryStringBindable),但仍然没有帮助