【发布时间】:2022-01-12 08:43:44
【问题描述】:
我有一个关于 Spring Boot 中 Json 序列化/反序列化的问题。
我有一个实体类,里面嵌入了id:
@Entity
@Table(name="USER_TABLE")
@Getter
@Setter
public class User {
private UserPK id;
private String name;
}
/* Getters and Setters excluded */
public class UserPK implements Serializable {
private Long userId;
private Long personalId;
}
现在,如果我序列化一个对象,Spring Boot 会在 JSON 中放置一个根“id”标签。能不能排除这个,放到name属性的同级?
实际结果:
{
"id":{"userId":321, "personalId":222},
"name":"John Doe"
}
预期结果:
{
"userId":321,
"personalId":222,
"name":"John Doe"
}
提前谢谢你!
【问题讨论】:
-
“如何忽略”的问题有点误导,因为您只想将字符串作为键而不是对象。通常,您正在寻找的是通过使用数据传输对象来完成的,这些对象使用通常在结构上不同的特殊表示在层之间传输数据(就像您想要的那样)。创建一个特殊的 DTO,比如
UserDto,定义其结构,在控制器中将User转换为UserDto(手动,使用MapStruct等)并将 DTO 放入响应实体中。 -
如果您使用 Jackson 来序列化/反序列化,您正在寻找的是 \@JsonUnwrapped 注释
-
感谢您的回答!它奏效了。
标签: java json spring-boot