我正在使用Spring Boot,并将尝试解释出现我怀疑的情况。
想象一下,MyObject有一些其他对象组成它。
public class MyObject {
private Integer id;
private MyObject2 obj2;
private MyObject3 obj3;
private MyObject4 obj4;
// getters and setters ...
}
其中一些领域,有MyObject组成它们。
比方说,MyObject2有MyObject一个领域,做某种双方之间的关系船。(例如:多对一)
public class MyObject2 {
// other fields
private List<MyObject> objs;
// getters and setters
}
由于我正在使用 REST API 并且需要将此实体返回到 Json,因此在序列化时可能会发生无限递归,因为一个实体引用另一个。
当我正在解决创建 DTO 和辅助类的递归问题时,我对调用 DTO 和辅助类的逻辑应该去哪里有疑问。
帮助程序
public static MyObject buildPrettyMyObject(MyObject obj) {
obj.setObj2(null);
return obj;
}
用于防止无限循环的逻辑是在去除所有MyObject2上的引用MyObject从参考MyObject2通过设定null。
我的助手类完成了这项工作,但是,我应该在哪里调用它?
在我的控制器中:
public ResponseEntity<?> handleRequestOfRetrieveAllMyObject2() {
List<MyObject2> objs2 = obj2Service.findAll();
objs2.forEach(obj2 -> obj2.getObjs().forEach(obj -> Helper.buildPrettyMyObject(obj)));
return ResponseEntity.ok(objs2);
}
在我的服务中:
public List<MyObject2> findAll() {
List <MyObject2> objs2 = obj2Repository.findAll();
objs2.forEach(obj2 -> obj2.getObjs().forEach(obj -> Helper.buildPrettyMyObject(obj)));
return objs2;
}
应该是Service层的工作,还是Controller层的工作?
我在控制器层这样做,因为控制器负责将响应返回给客户端,而服务层应该只执行业务规则并且必须是可重用的。
我这样做错了吗?
炎炎设计
相关分类