A.java
@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
@Entity
@Getter
@Setter
@DiscriminatorValue("aa")
public class AA extends A{
private User user;
}
AB.java
@Entity
@Getter
@Setter
@DiscriminatorValue("ab")
public class AB extends A {
private String name;
}
现在,当我将AB
类的一个实例作为JSON返回时,它看起来是这样的:
{
"id": 1,
"type": "ab",
"children": [...],
"name": "ali"
}
因为我想使用定制的User
JSON,所以我想使用ModelMapper。
我的DTO:
@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 ?
发布于 2018-05-23 23:40:25
可能的解决方案:
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");}
发布于 2021-12-29 21:38:49
您可以在定义父类时使用InheritanceType,这将有助于显示类的子类型
前A.java
@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 {
https://stackoverflow.com/questions/50424067
复制相似问题