gpt4 book ai didi

java - 如何使用 Play 2.0 路由绑定(bind) Double 参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:15:26 25 4
gpt4 key购买 nike

我正在学习 Play 2.0(使用 Java API)并希望有一个 double/float 参数(用于位置坐标),比如 http://myfooapp.com/events/find?latitude=25.123456&longitude=60.251253

我可以通过获取字符串形式的参数并在 Controller 等处解析它们来做到这一点,但是我可以在这里使用自动绑定(bind)吗?

现在,我首先尝试简单地使用一个 double 值:

GET     /events/foo                 controllers.Application.foo(doublevalue: Double)

public static Result foo(Double doublevalue) {
return ok(index.render("Foo:" + doublevalue));
}

我得到的是“没有找到 Double 类型的 QueryString 绑定(bind)器。尝试为此类型实现隐式 QueryStringBindable。”

我是否遗漏了已经提供的内容或我必须制作一个解析 Double 的自定义 QueryStringBindable 吗?

我在 http://julien.richard-foy.fr/blog/2012/04/09/how-to-implement-a-custom-pathbindable-with-play-2/ 找到了一些关于使用 Scala 制作自定义字符串查询字符串绑定(bind)器的说明

我尝试了什么:

我在包 Binder 中实现了 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 Binder ……”

  • 我还将路由签名更改为 java.lang.Double,但这也没有帮助
  • 我还更改了 DoubleBinder 以在路由签名处使用 Double 和 java.lang.Double 实现 play.api.mvc.QueryStringBindable(而不是 play.mvc.QueryStringBindable),但仍然没有帮助

最佳答案

目前(在 Play 2.0 中),Java 绑定(bind)器仅适用于自递归类型。也就是说,类型如下所示:

class Foo extends QueryStringBindable<Foo> {

}

所以,如果你想为java.lang.Double定义一个binder,这是一个Java的现有类型,你需要将它包装在一个自递归类型中。例如:

package util;

public class DoubleW implements QueryStringBindable<DoubleW> {

public Double value = null;

@Override
public Option<DoubleW> bind(String key, Map<String, 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) {

}

关于java - 如何使用 Play 2.0 路由绑定(bind) Double 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10286725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com