Mor*_*ndi 15 java dto modelmapper
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;
}
Run Code Online (Sandbox Code Playgroud)
AA.java
@Entity
@Getter
@Setter
@DiscriminatorValue("aa")
public class AA extends A{
private User user;
}
Run Code Online (Sandbox Code Playgroud)
AB.java
@Entity
@Getter
@Setter
@DiscriminatorValue("ab")
public class AB extends A {
private String name;
}
Run Code Online (Sandbox Code Playgroud)
现在,当我将类的实例AB作为JSON 返回时,它看起来像这样:
{
"id": 1,
"type": "ab",
"children": [...],
"name": "ali"
}
Run Code Online (Sandbox Code Playgroud)
由于我想使用自定义UserJSON,我想使用ModelMapper.一切都好,除了缺席type.
我的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;
}
Run Code Online (Sandbox Code Playgroud)
我如何使用ModelMapper并获取type类?
可能的解决方案:
一个简单的经过测试的技巧,添加protected String type = this.getClass().getSimpleName().toLowerCase();. 请注意,它必须受到保护。这是我测试过的代码:
@Data
abstract class A {
protected String type = this.getClass().getSimpleName().toLowerCase();
}
class AB extends A {}
class AA extends A {}
@Test
public void test(){
A a1 = new AB();
A a2 = new AA();
assertThat(a1.getType()).isEqualTo("ab");
assertThat(a2.getType()).isEqualTo("aa");
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
621 次 |
| 最近记录: |