Spring boot 如何在运行时启用/禁用实体关系?
我有一个Spring Boot应用程序,它有基本的CRUD服务。对于阅读服务,我也希望看到它们之间的关系。通过@ManyToOne、@OneToOne等实现关系没有问题。注释如示例所示 我的问题是我想基于列表服务中的参数启用这种关系,或者我也可以使用另一个端点。我怎样才能做到这一点?欢迎提出任何建议Spring boot 如何在运行时启用/禁用实体关系?,spring-boot,spring-data-jpa,spring-data,spring-data-rest,Spring Boot,Spring Data Jpa,Spring Data,Spring Data Rest,我有一个Spring Boot应用程序,它有基本的CRUD服务。对于阅读服务,我也希望看到它们之间的关系。通过@ManyToOne、@OneToOne等实现关系没有问题。注释如示例所示 我的问题是我想基于列表服务中的参数启用这种关系,或者我也可以使用另一个端点。我怎样才能做到这一点?欢迎提出任何建议 参数版本可能类似-> /员工/列表?includeRelations=true 端点版本可能类似-> /员工/名单/关系 我的实体就像 @Entity @Table(name =
- 参数版本可能类似-> /员工/列表?includeRelations=true
- 端点版本可能类似-> /员工/名单/关系
@Entity
@Table(name = "employee")
public class Employee{
private long id;
private String name;
private Address address;
// getter setters
}
@Entity
@Table(name = "address")
public class Address {
private long id;
private String name;
private String postalCode;
// getter setters
}
编辑
e、 g
- 如果没有includeRelations=true,“/employee/list”服务应返回此信息李>
- includeRelations=true时,“/employee/list”服务应返回此信息李>
这是一些供您理解的
sudo
代码。您可以使用查询参数
,在您需要调用回购的情况下:
对于我的场景,我需要不同的响应short
,medium
和long
@RequestMapping(value=“/getContacts”,method=RequestMethod.POST,products=MediaType.APPLICATION\u JSON\u value,headers=“Accept=APPLICATION/JSON”)
公共字符串getContact(@RequestBody ContactItemRequestInfo ContactItemRequestInfo,
@RequestParam(必需=false)字符串键,
(串触点)
{
}
这对你会有帮助的 其中一种方法是根据REST请求返回不同的数据传输对象 假设除了实体之外,还有以下类
class EmployeeDto {
private Long id;
private String name;
}
class EmployeeAddressDto {
private Long id;
private String name;
private AddressDto address;
}
class AddressDto {
private Long id;
private String name;
private int postalCode;
}
然后在控制器中,你会做这样的事情
@GetMapping("/employee/list")
public ResponseEntity<?> getEmployees(@RequestParam int detailed) {
if (detailed) {
return employeeService.getDetailedEmployeeList();
} else {
return employeeService.getEmployeeList();
}
}
interface EmployeService() {
List<EmployeeDto> getEmployeeList();
List<EmployeeAddressDto> getDetailedEmployeeList();
}
@GetMapping(“/employee/list”)
公共响应getEmployees(@RequestParam int detailed){
如有(详情){
返回employeeService.getDetailedEmployeeList();
}否则{
返回employeeService.getEmployeeList();
}
}
服务接口看起来是这样的
@GetMapping("/employee/list")
public ResponseEntity<?> getEmployees(@RequestParam int detailed) {
if (detailed) {
return employeeService.getDetailedEmployeeList();
} else {
return employeeService.getEmployeeList();
}
}
interface EmployeService() {
List<EmployeeDto> getEmployeeList();
List<EmployeeAddressDto> getDetailedEmployeeList();
}
interface employeeservice(){
List getEmployeeList();
List getDetailedEmployeeList();
}
您还需要处理实体来传输对象转换。您可以使用fetchType=Lazy注释关系。然后调用getter手动加载所需的关系。
另一种选择是急切地加载所有关系,但用@JsonView注释响应并排除不需要的关系。仍然不清楚。你所说的启用这种关系是什么意思?给出场景。@krishnkantjaiswal我已经添加了一个示例。如果还不清楚,请告诉我。
interface EmployeService() {
List<EmployeeDto> getEmployeeList();
List<EmployeeAddressDto> getDetailedEmployeeList();
}