Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义枚举的QueryStringBindable_Java_Enums_Playframework_Query String - Fatal编程技术网

Java 自定义枚举的QueryStringBindable

Java 自定义枚举的QueryStringBindable,java,enums,playframework,query-string,Java,Enums,Playframework,Query String,我已经定义了一个枚举类型格式,它实现了QueryStringBindable。我想我已经正确地实现了它,但是在我的routes文件中,我不能将我的类型指定为route参数,因为编译器找不到它,我也不知道如何将它导入routes文件 以下是枚举: package web; import java.util.Map; import play.libs.F; import play.mvc.QueryStringBindable; public enum Format implements Qu

我已经定义了一个枚举类型
格式
,它实现了
QueryStringBindable
。我想我已经正确地实现了它,但是在我的routes文件中,我不能将我的类型指定为route参数,因为编译器找不到它,我也不知道如何将它导入routes文件

以下是枚举:

package web;

import java.util.Map;

import play.libs.F;
import play.mvc.QueryStringBindable;

public enum Format implements QueryStringBindable<Format> {
    Html,
    Pdf,
    Csv;

    private Format value;

    @Override
    public F.Option<Format> bind(String key, Map<String, String[]> data) {
        String[] vs = data.get(key);
        if (vs != null && vs.length > 0) {
            String v = vs[0];
            value = Enum.valueOf(Format.class, v);
            return F.Option.Some(value);
        }
        return F.Option.None();
    }

    @Override
    public String unbind(String key) {
        return key + "=" + value;
    }

    @Override
    public String javascriptUnbind() {
         return value.toString();
    }
}
如何告诉编译器我的枚举?谢谢

编辑

我还尝试将路径添加到Build.scala中的类型,正如在其他帖子中建议的那样:

val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA).settings(
  routesImport += "web.Format",
  resolvers += Resolver.url("My GitHub Play Repository", url("http://www.joergviola.de/releases/"))(Resolver.ivyStylePatterns)
)

我改变了这一点并重新启动了我的服务器,但这似乎没有任何区别。

在路由文件中使用限定名称,即web.Format

我遇到了同样的问题,我最终发现它无法解决

通过阅读
PathBindable
QueryStringBindable
的文档,我发现play framework要求绑定表提供无参数公共构造函数。根据定义,在Java中使用
enum
是不可能的

我想为您提供与我提出的另一个(最近的)问题相同的解决方案。 我刚刚将枚举包装到一个小包装类中,该类实现了
QueryStringBindable
PathBindable


在发布之前尝试过。没有骰子。
val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA).settings(
  routesImport += "web.Format",
  resolvers += Resolver.url("My GitHub Play Repository", url("http://www.joergviola.de/releases/"))(Resolver.ivyStylePatterns)
)