当前位置: 首页 > 知识库问答 >
问题:

PlayFramework bindFromRequest()以扩展通用模型的模型形式出现

武卓
2023-03-14

我第一次在扩展泛型对象的模型中使用“从类播放”对象。

当我试图从请求绑定并将其分配到我的具体模型的表单时,出现了错误:

Form<Unit> filled_form = form(Unit.class).bindFromRequest();

我得到的错误:

[error] play - Cannot invoke the action, eventually got an error: javax.validation.ValidationException: HV000041: Call to TraversableResolver.isReachable() threw an exception.

堆栈跟踪:

FORM TEST
[error] play - Cannot invoke the action, eventually got an error: javax.validation.ValidationException: HV000041: Call to TraversableResolver.isReachable() threw an exception.
[error] application - 

! @6kb173m85 - Internal server error, for (POST) [/SupraADMIN/oddzialy/zapisz] ->

play.api.Application$$anon$1: Execution exception[[ValidationException: HV000041: Call to TraversableResolver.isReachable() threw an exception.]]
        at play.api.Application$class.handleError(Application.scala:293) ~[play_2.10.jar:2.2.4]
        at play.api.DefaultApplication.handleError(Application.scala:399) [play_2.10.jar:2.2.4]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:264) [play_2.10.jar:2.2.4]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:264) [play_2.10.jar:2.2.4]
        at scala.Option.map(Option.scala:145) [scala-library.jar:na]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3.applyOrElse(PlayDefaultUpstreamHandler.scala:264) [play_2.10.jar:2.2.4]
Caused by: javax.validation.ValidationException: HV000041: Call to TraversableResolver.isReachable() threw an exception.
        at org.hibernate.validator.internal.engine.ValidatorImpl.isReachable(ValidatorImpl.java:1316) ~[hibernate-validator.jar:5.0.1.Final]
        at org.hibernate.validator.internal.engine.ValidatorImpl.isValidationRequired(ValidatorImpl.java:1292) ~[hibernate-validator.jar:5.0.1.Final]
        at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:475) ~[hibernate-validator.jar:5.0.1.Final]
        at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:424) ~[hibernate-validator.jar:5.0.1.Final]
        at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:388) ~[hibernate-validator.jar:5.0.1.Final]
        at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:340) ~[hibernate-validator.jar:5.0.1.Final]
Caused by: java.lang.NullPointerException: null
        at models.Generic.hashCode(Generic.java:128) ~[na:na]
        at org.hibernate.validator.internal.engine.resolver.SingleThreadCachedTraversableResolver$TraversableHolder.buildHashCode(SingleThreadCachedTraversableResolver.java:153) ~[hibernate-validator.jar:5.0.1.Final]
        at org.hibernate.validator.internal.engine.resolver.SingleThreadCachedTraversableResolver$TraversableHolder.<init>(SingleThreadCachedTraversableResolver.java:114) ~[hibernate-validator.jar:5.0.1.Final]
        at org.hibernate.validator.internal.engine.resolver.SingleThreadCachedTraversableResolver$TraversableHolder.<init>(SingleThreadCachedTraversableResolver.java:96) ~[hibernate-validator.jar:5.0.1.Final]
        at org.hibernate.validator.internal.engine.resolver.SingleThreadCachedTraversableResolver.isReachable(SingleThreadCachedTraversableResolver.java:41) ~[hibernate-validator.jar:5.0.1.Final]
        at org.hibernate.validator.internal.engine.ValidatorImpl.isReachable(ValidatorImpl.java:1307) ~[hibernate-validator.jar:5.0.1.Final]
[error] application - REGUEST: POST /SupraADMIN/oddzialy/zapisz GENERATED ERROR: @6kb173m85: Execution exception in /home/korbeldaniel/Aplikacje/Eclipse/SVP/modules/admin/app/controllers/CMS.java:472

以下是我的控制器方法:

        System.out.println("FORM TEST");
        Form<Unit> filled_form = form(Unit.class).bindFromRequest();
        System.out.println(filled_form);
        if (filled_form.hasErrors()) {
            List<Unit> unitsList = new Unit().getList();
            return badRequest(views.html.CMS.UnitsAdd.render(unitsList,filled_form,new Unit().prepareJsonTree()));
        } else {
            filled_form.get().toDataBase();
            flash("success", "Pomyślnie dodano.");
            return redirect(routes.CMS.Units());
        }

和模型类:

@Entity
@Table(name="common__Unit")
public class Unit extends GenericDictionary<Unit> {
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="parent_id")
    public Unit parent;

以及通过单元模型扩展的GenericDictionary模型:

@MappedSuperclass
public abstract class GenericDictionary<T extends Generic<T>> extends Generic<T> {

    @Required
    public String name;
    @Required
    public boolean active = true;

以及由GenericDictionary模型扩展的通用模型:

@MappedSuperclass
public abstract class Generic<T extends Generic> {
    @Transient
    public Class<T> entityClass;
    Generic() {
        entityClass = ((Class) ((Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]));
    }
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    public Long id;

    @ManyToOne(cascade = CascadeType.MERGE)
    @Constraints.Required
    public User creationUser;

请帮帮我。

共有1个答案

诸葛康胜
2023-03-14

当使用复杂类型层次结构时,getGenericSuperclass方法不起作用。相反,您可以尝试使用TypeTools:

Generic() {
    entityClass = (Class<T>)TypeResolver.resolveRawArgument(Generic.class, getClass());
}
 类似资料:
  • 我正试图用三个额外的日期(时间戳)字段扩展扩展扩展名(新闻),并希望在(新闻)的fluidtemplate中调用这些字段。 我已经连线到目前为止,我可以看到我的后端额外的字段,而无需选择一个外部类型-我已经相应地修改了ext_tables.php,并可以保存数据。 现在,我试图在我的新闻流模板中使用这些字段,在我的Partials/List/Item中使用以下代码。html-{newsItem.d

  • 为什么要扩展mongoose模型? 我们对业务进行分层处理 service(多模型操作) -> dao(单一模型操作) -> model(模型定义) 所以我们在dao层需要很多单一模型的数据库操作方法的封装,如果业务非常复杂,比如一个超级查询方法,然后又有各种具体业务定义方法,难道我们一个一个的都写在dao层么? 事实上dao只做暴露给service的方法,而具有一定业务约定的方法是可以放到mo

  • 目前,我有多个运行Apollo的GraphQL服务,并创建了一个“网关”服务,该服务使用远程模式拼接,以便为我提供一个单一的访问endpoint。 在我的网关服务中,我希望扩展远程类型,以便在缝合的架构之间创建引用。 然而,我似乎得到了以下错误: GraphQLError:无法扩展类型"User",因为它不存在于现有架构中。 我进行了双重检查,并且类型“User”和“Profile”存在,我可以从

  • 问题内容: 有没有一种方法可以扩展内置的Django Group对象以添加其他属性,类似于可以扩展用户对象的方法?使用用户对象,你可以执行以下操作: 并将以下内容添加到settings.py文件中 这使你: 扩展小组有什么等效方法吗?如果没有,我是否可以采用其他方法? 问题答案: 你可以创建一个对Group进行子类化的模型,添加自己的字段,并使用模型管理器返回所需的任何自定义查询集。这是一个截断的

  • 问题内容: 我想为此创建一个扩展名,仅影响… 我了解这些说明是相关的,但不确定如何: 扩展通用类型时,不提供类型参数列表作为扩展定义的一部分。而是在扩展程序的正文中提供原始类型定义的类型参数列表,并且原始类型参数名称用于引用原始定义的类型参数。 基本上,我正在尝试使用此方法: 在没有参数的情况下采取行动…这可能吗? 问题答案: Swift 3.1更新 从Swift 3.1(Xcode 8.3 be