Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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 多态性播放框架2 bindFromRequest_Java_Playframework 2.0 - Fatal编程技术网

Java 多态性播放框架2 bindFromRequest

Java 多态性播放框架2 bindFromRequest,java,playframework-2.0,Java,Playframework 2.0,编辑:Play Framework开发者的答案是: 使用基于SpringDataBind的JavaFormAPI进行多态绑定是不可能的。据我所知,Spring数据绑定不支持它 支持多态性的一个变通方法是使用ajax和JSON(Jackson将负责serlialization): 在视图中:ajax数据将是表单的JSON表示 在控制器中:获取JSON: Animals animals=Json.fromJson(ctx.request().body().asJson(), Animals.cla

编辑:Play Framework开发者的答案是:

使用基于SpringDataBind的JavaFormAPI进行多态绑定是不可能的。据我所知,Spring数据绑定不支持它

支持多态性的一个变通方法是使用ajax和JSON(Jackson将负责serlialization):

  • 在视图中:ajax数据将是表单的JSON表示
  • 在控制器中:获取JSON:

    Animals animals=Json.fromJson(ctx.request().body().asJson(), Animals.class); 
    
结束编辑

我有如下模型:

enum Type{ PARROT, ZEBRA} 

@JsonTypeInfo( use = JsonTypeInfo.Id.NAME,  include = JsonTypeInfo.As.PROPERTY,  
property = "animalType", visible = true)  
@JsonSubTypes({  
@Type(value = Mammal.class, name = "ZEBRA"),  
@Type(value = Bird.class, name = "PARROT"),
class Animal{
    public Integer color;
    public Type animalType;
}
class Bird extends Animal{
    public Integer airSpeed;
    public Integer wingType;
}
class Mammal extends Animal{
    public Integer legs;
}
class Animals{
    List<Animal> animals;
    Integer num;
}

如果我在animaltest.animals中获取内容,它将只包含动物对象的列表。关于他们的亚型没有什么。有一种方法可以在Play Framework 2中序列化/解压多态实体?

这似乎不是特定于Play的。假设你有一个动物的例子(忘记游戏)。您如何知道列表中包含的每个实例是否实际上是子类的实例?你不能。@Janus Troelsen这里的问题与解组/序列化有关。多态性可以通过几种方式进行序列化:Jackson可以使用@JsonTypeInfo进行映射,JAXB可以使用@xmlsee,也可以直接使用类名。所以我问Play是否提供任何注释或任何我可以用于在序列化发生时设置映射的东西。@Janus Troelsen,在本例中我可以,因为我有我的枚举:for(Animal-Animal:animals.list){If(Animal.animalType==Type.PARROT){哺乳动物哺乳动物=(哺乳动物)Animal;}
Animals animalsTest= Form.form(Animals.class).bindFromRequest().get();