如何将Double参数与Play 2.0路由绑定

2023-11-23

我正在学习 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),但仍然没有帮助

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

class Foo extends QueryStringBindable<Foo> {
  …
}

所以,如果你想定义一个活页夹java.lang.Double,这是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) {
      …
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将Double参数与Play 2.0路由绑定 的相关文章

随机推荐

  • 创建缩略图,然后转换为字节数组

    我在创建缩略图然后将它们转换为字节数组方面遇到了很大的麻烦 我尝试了三种方法 3次都出错了 第一个是使用 Bitmap GetThumbnailImage 我过去使用过它 然后直接保存到 Response OutputStream 中 第二
  • 具有自定义逻辑的 Java 8 Stream groupingBy

    我有一个清单Records 其中有两个字段 LocalDateTime instant and a Double data 我想按小时对所有记录进行分组并创建一个Map
  • Java中的协议缓冲区“ParseFromString”用于解析文本格式?

    Is ParseFromStringJava 中的协议缓冲区可用吗 C 版本有 here 留言A 方法TextFormat getParser merge str builder 可以 例如 AOuterClass A Builder bu
  • 如何在phpmyadmin中使用“中心列”?

    PMA 具有用于添加中心列的工具 据我了解 它是在国外的限制下使用的 我有两张桌子 TableA and TableB 结构TableA id of A name of A value 结构TableB id of B foreign id
  • 如何在 PySpark 中展平嵌套列表?

    我有一个 RDD 结构 例如 rdd 1 2 3 4 5 6 7 8 9 10 我希望它变成 rdd 1 2 3 4 5 6 7 8 9 10 如何编写映射或归约函数才能使其正常工作 例如你可以flatMap并使用列表理解 rdd flat
  • 中断异常的原因

    从 J2me 文档我们知道 java lang InterruptedException 当线程正在等待 睡眠或以其他方式暂停很长时间并且另一个线程中断它时抛出 问题是 如果我从一个线程为其他线程调用 Thread Interupt 而其他
  • 图形中的边交叉减少

    是否有任何算法可以最小化图中的边交叉 例如 如果我有图形的转换矩阵 我找到了一些方法 例如尝试将节点放置在另一个节点周围 但我想知道一些其他想法 有一系列为图形绘制应用程序开发的成熟算法 库 您可以获得一些背景知识here 要绘制无向图 一
  • WebDriver 和 C# - NoSuchElement 异常

    我有以下代码用于从给定列表中选择一个选项 它通常可以工作 但有时会失败 并在第二个 if 上出现 NoSuchElement 异常 我的印象是 如果它没有找到该元素 它就会再次返回到循环 我相信解释很简单 有人能启发我吗 public st
  • Git 工作流程以及 rebase 与合并问题

    我和另一位开发人员在一个项目中使用 Git 已有几个月了 我有多年的经验SVN 所以我想我给这段关系带来了很多包袱 我听说 Git 非常适合分支和合并 但到目前为止 我只是没有看到它 当然 分支非常简单 但是当我尝试合并时 一切都变得一团糟
  • clang-format 堆叠所有 if 语句参数(如果它们太长)

    我有一个if声明有几个or编辑的论点 为了便于阅读 我将它们垂直堆叠如下 if health flag a health flag b health flag c health flag d health flag e health fla
  • python-docx 中的运行级别内容是什么?

    我对 python docx 中 运行级别内容 的概念有点困惑 我知道如果我想检查段落是否为粗体 我需要检查 run bold 但到底是什么它 官方的定义是 run是与内联内容关联最密切的对象 在段落内的块项目边界之间流动的文本 图片和其他
  • 如何在发布模式下为 .net 托管项目生成 PDB?

    我知道 PDB 是为managed通过为编译器提供 debug 参数来在 NET 中进行项目 有没有办法在 VS 2005 GUI 中指定这一点 到目前为止 我可以让它在发布模式下生成 PDB 的唯一方法是手动修改 csproj 文件并添加
  • 具有多个“操作”的 HTML 表单

    我正在设置一个表单 其中我需要两个 操作 两个按钮 1 提交此表格以供批准 2 保存此应用程序供以后使用 如何创建支持多个 操作 的 HTML 表单 EG
  • Git克隆:远程端意外挂起,尝试更改postBuffer但仍然失败

    我正在尝试克隆存储库 第一次我到了82 然后半个小时没动 所以我取消了克隆并重新开始 此后 每次我尝试克隆它时 都会得到 6 10 之间的结果 然后失败并出现错误 远程端意外挂起 早期 EOF 我查找了错误并尝试了我能找到的所有解决方案 最
  • Python 扫描 WiFi

    我正在寻找一个可以扫描 WiFi 网络并打印所有 SSID 的程序 我尝试使用 scapy 但失败了 我正在使用 pyCharm 编辑器 我尝试了这段代码 from scapy all import from scapy layers do
  • Peterson 的算法能满足饥饿问题吗?

    我一直在搜索有关的信息彼得森算法但遇到的参考资料表明它不能解决饥饿问题 而只能解决僵局 这是真的 如果是这样 有人可以详细说明为什么不吗 彼得森算法 flag 0 0 flag 1 0 turn P0 flag 0 1 turn 1 whi
  • SVG 线性渐变 objectBoundingBox 与 userSpaceOnUse

    我正在制作两个渐变 一个以 objectBoundingBox 为单位 另一个以 userSpaceOnUse 为单位 这个想法是让它们看起来一样 但不知怎的 他们是不同的 这是 svg 文件
  • C# 中相当于 PHP 的“self::”的是什么?

    在 C 中 当我想从该类的另一个静态方法调用该类的静态方法时 是否有一个通用前缀我可以使用 PHP 等self 而不是类名 所以在下面的例子中 而不是说Customer DatabaseConnectionExists 我该怎么说Self
  • Java流操作在终点的执行顺序[重复]

    这个问题在这里已经有答案了 我一直试图从官方 Java 文档中找到关于 Java 流的明确约定 一旦调用终端操作 处理元素并调用中间操作 例如 让我们看一下这些同时使用 Java 流版本和普通迭代版本的示例 两者产生相同的结果 示例1 Li
  • 如何将Double参数与Play 2.0路由绑定

    我正在学习 Play 2 0 使用 Java API 并且想要一个 double float 参数 用于位置坐标 例如 我可以通过获取字符串形式的参数并在控制器等处解析它们来做到这一点 但是我可以在这里使用自动绑定吗 现在 我首先尝试简单地