java - Play 的通用包装方法!楷模

标签 java generics annotations playframework

我正在尝试为我的 Play 实现 RESTful 界面!使用通用包装器的框架模型。

我想使用通用方法来调用并返回每个模型各自的“查找”方法。

private static <T extends GenericModel> void getModel(T model, Params params){
if (params._contains("id")){
  renderJSON(model.findById(params.get("id", Long.class)));
}
else{
  renderJSON(model.findAll());
}

}

上述方法的调用如下,在我的 Controller 的 GET 方法中,根据通过特定路由请求哪个模型:

getModel(new User(), params);

由于 find() 方法实际上是 GenericModels 类的静态方法,因此它应该完全可能。但是,由于 Play 为每个定义的模型生成代码,我收到此错误:

发生了 UnsupportedOperationException:请使用 @javax.persistence.Entity 注释来注释您的 JPA 模型。

至少,我认为这就是原因。难道就没有办法解决这个问题吗?我是否被迫为每个类实现相同的 GET、PUT、UPDATE、DELETE 方法?

最佳答案

我认为“model.findById”调用了未实现的 GenericModel.findById 静态函数并生成异常。它不会在运行时调用JPAPlugin增强的静态函数。

我不确定它是否有效,但您应该尝试直接调用 JPQL 函数,例如:

private static <T extends GenericModel> void getModel(Class<T> clazz, Params params){
if (params._contains("id")){
  renderJSON(JPQL.instance.findById(clazz.getSimpleName(), params.get("id", Long.class)));
}
else{
  renderJSON(model.findAll());
}

并按如下方式调用它:

getModel(new User(), User.class, params);

关于java - Play 的通用包装方法!楷模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7334416/

相关文章:

java - 如何按常规字段映射表?

spring - 有人有 Spring AOP @DeclareParents 示例吗?

java - 是否可以将FormLayout 放入GridLayout 中?

c# - 使用泛型和覆盖通过反射调用方法

Java 泛型 put-get 规则

c# - 如何找到列表之间的差异?

java - 方法签名内的@Validation

java - 命名静态构造函数方法的首选 Java 约定是什么

java - 如何终止多线程中超时的任务?

java - 从 MainActivity 调用时服务未启动