我的数据库中有几张表。员工、地址、Phone_id
Table Employee
====================
ID | Emp_Name | Address_id | Phones_id
Table Address
====================
ID | Block_no | City | State
Table Phone_id
====================
ID | Phone_1 | Phone_2 | Phone_3
当我显示直接从存储库接收的 JSON 时,它可以工作,但不是 UI 预期的格式。
我希望对收到的 JSON 进行一些更改。基本上,转换它,然后通过 REST 提供响应。
所以我的问题是:
谢谢一堆!
请您参考如下方法:
建议留着你@Entity
类和您的 JSON 表示类分开。
假设您有 @Entity
类(class)Employee
.
一种选择是使用相同的 Employee
类来描述您的数据库实体(假设使用 JPA 注释),然后使用相同的 Employee
类来描述您想要返回给客户端的 JSON(假设使用 Jackson 注释)。
由于各种原因,这被认为是不好的做法。
最常见的一种情况是,大多数时候您不希望所有实体都以 1:1 的比例映射到您的 JSON 响应。
为了解决这个问题,一个常见的方法是创建一个单独的 Employee
类来描述您的 JSON 表示。你可以叫它EmployeeDto
.
然后你必须写一个自定义逻辑来映射 @Entity
Employee
至 EmployeeDto
.
您可以像这样使用静态工厂方法:
//Persistence layer class
@Entity
public class Employee {
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
//getters/setters
}
//REST layer class
public class EmployeeDto {
@JsonProperty("first_name")
private String firstName;
@JsonProperty("last_name")
private String lastName;
public EmployeeDto() {}
// you can do any transforamtion/validation here
public static EmployeeDto fromEntity(Employee employee){
EmployeeDto dto = new EmployeeDto();
dto.setFirstName(employee.getFirstName);
dto.setLastName(employee.getLastName);
}
//getters/setters
}
然后您的 Controller 将返回
List<EmployeeDto>
而不是
@Entity
Employee
.
更新:
Spring 没有提供 DTO 和 Entity 对象之间的自动转换机制。我认为这取决于类的复杂性和对的数量(DTO/实体),但大多数情况下,自己实现转换很容易。
当然,那里有一些库,它们为映射提供了一定程度的自动化: