加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何使用Play 2.0路由绑定双参数

发布时间:2020-12-14 05:51:56 所属栏目:Java 来源:网络整理
导读:我正在学习Play 2.0(使用 Java API),并希望有一个double / float参数(位置坐标),像 http://myfooapp.com/events/find?latitude=25.123456longitude=60.251253. 我可以通过获取参数为String并在控制器解析它们,但可以在这里使用自动绑定吗? 现在,我首先尝试
我正在学习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为此类型.

我错过了已经提供的东西
我需要自定义QueryStringBindable来分析Double吗?

我发现一些关于在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,但这也没有帮助
>我还更改了DoubleBinder来实现play.api.mvc.QueryStringBindable(而不是play.mvc.QueryStringBindable),双重和& 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) {
      …
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读