首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将ModelMapper用于深度继承对象?

如何将ModelMapper用于深度继承对象?
EN

Stack Overflow用户
提问于 2018-05-19 18:06:50
回答 2查看 1.2K关注 0票数 20

A.java

代码语言:javascript
复制
@Entity
@Getter
@Setter
@Inheritance
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, inclue=JsonTypeInfo.As.PROPERTY, property="type") 
@JsonSubTypes({
    @JsonSubTypes.Type(value=AA.class,name="aa"),
    @JsonSubTypes.Type(value=AB.class,name="ab"),
})
public abstract class A {
    @Id
    @GeneratedValue
    private Long id;

    //json ignore for getter
    @ManyToOne
    private A parent;

    @OneToMany(mappedBy="parent")
    private List<A> children;
}

AA.java

代码语言:javascript
复制
@Entity
@Getter
@Setter
@DiscriminatorValue("aa")
public class AA extends A{
    private User user;
}

AB.java

代码语言:javascript
复制
@Entity
@Getter
@Setter
@DiscriminatorValue("ab")
public class AB extends A {
    private String name;
}

现在,当我将AB类的一个实例作为JSON返回时,它看起来是这样的:

代码语言:javascript
复制
{
     "id": 1,
     "type": "ab",
     "children": [...],
     "name": "ali"
}

因为我想使用定制的User JSON,所以我想使用ModelMapper

我的DTO:

代码语言:javascript
复制
@Getter
@Setter
public class ADto {
     private Long id;

     private List<ADto> children;
}

@Getter
@Setter
public class AADto extends ADto {
     private UserDto user;
}

@Getter
@Setter
public class ABDto extends ADto {
     private String name;
}

如何使用 和get of ?

EN

回答 2

Stack Overflow用户

发布于 2018-05-23 23:40:25

可能的解决方案:

  1. 您是否尝试过在父类中添加属性类型?如果您从DB检索此字段,这应该足够了。
  2. 一个简单的测试技巧,添加protected String type = this.getClass().getSimpleName().toLowerCase();。请注意,它必须受到保护。下面是我测试过的代码:

@Data抽象类A{ protected String type = this.getClass().getSimpleName().toLowerCase();}类AB扩展A {}类AA扩展A {} @Test public void test(){ A a1 = new AB();A a2 = new AA();assertThat(a1.getType()).isEqualTo("ab");assertThat(a2.getType()).isEqualTo("aa");}

票数 0
EN

Stack Overflow用户

发布于 2021-12-29 21:38:49

您可以在定义父类时使用InheritanceType,这将有助于显示类的子类型

前A.java

代码语言:javascript
复制
@Entity
@Getter
@Setter
@Inheritance(strategy=InheritanceType.JOINED) // change needed 
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, inclue=JsonTypeInfo.As.PROPERTY, property="type") 
@JsonSubTypes({
    @JsonSubTypes.Type(value=AA.class,name="aa"),
    @JsonSubTypes.Type(value=AB.class,name="ab"),
})
public abstract class A {
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50424067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档