java - 在 REST API 中实现子资源
问题描述
我需要在 REST API 中实现子资源
URL 将类似于:
https://localhost:8080/v1/student/ {id}?include=address,qualification,login
所以地址,资格和登录是三个子资源,如果我们添加这是查询参数,它将被包括在内。子资源可以是数据库调用或其他服务的休息调用
问题发生在实施方面,我已将@RequestParam List 包括在内
所以目前我在服务课上是这样写的
public Student getStudentDetail(Integer id ,List<String> include){
Student student = new Student();
// setting student details
for(String itr: include){
if(itr=="address"){
student.setAddress(repo.getAddress(id));
}
if(itr=="qualification"){
student.setQualication(repo.getQualification(id));
}
if(itr=="login"){
student.setLogin(client.getLogin(id));// here client in Rest Call for
}
}
return student;
}
学生班级:
@Data
public Class Student{
private String id;
private List<Address> address;
private List<Qualification> qualification;
private Login login;
}
所以在这里我需要为每个子资源添加 if 条件,你能建议任何更好的方法来做到这一点或任何设计原则。
还有另一种使用反射 API 在运行时获取存储库方法名称的方法,但它增加了额外的调用开销。
另一种方法可以是:
我可以使用策略设计模式
Abstract Class
public Abstract class Subresource{
public Student getSubresouce(Integer id,Student student){}
}
public class Address extends Subresource{
@Autowired
Databaserepo repo;
public Student getSubresource(Integer id , Student student){
return student.setAddress(repo.getAddress(id));
}
}
public class Login extends Subresource{
@Autowired
RestClient client;
public Student getSubresource(Integer id, Student student){
return student.setLogin(client.getLogin(id));
}
}
但在这种方法中,我无法在服务中编写逻辑
public Student getStudentDetail(Integer id ,List<String> include){
Student student = new Student();
// setting student details
for(String itr: include){
// Need to fill logic
// Help me here to define logic to use strategy oattern
}
return student;
}
解决方案
推荐阅读
- android - android build.gradle 模块应用程序错误:无法解决:注释
- xaml - 如何仅在 UWP 中将 AcrylicBrush 添加到工具栏
- unix - CircleCI 运行多行命令
- parsing - 如何使用 asyncio 模块在 python 中解析网站?
- .net - 为什么我的 MessageBox 显示这么多次?
- java - PDFDomTree 在将 pdf 文件转换为 html 时未检测到空格
- android - 通过更新到 Android Studio 3.2 迁移到 AndroidX
- powershell - 删除文件和文件夹 1 级下
- ios - 没有为团队“xyz”找到具有 iTunes Connect 访问权限的帐户。App Store 分发需要itunes Connect 访问权限
- xml - 使用 Groovy 从文档中断言特定的 xml 标记