Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 准备响应正文的逻辑应该在@Service或@Controller上?_Java_Rest_Spring Boot - Fatal编程技术网

Java 准备响应正文的逻辑应该在@Service或@Controller上?

Java 准备响应正文的逻辑应该在@Service或@Controller上?,java,rest,spring-boot,Java,Rest,Spring Boot,我正在使用Spring Boot,并将尝试解释出现疑问的情况 想象一下,MyObject有一些其他对象组成它 public class MyObject { private Integer id; private MyObject2 obj2; private MyObject3 obj3; private MyObject4 obj4; // getters and setters ... } 其中一些字段由MyObject组成 假设MyObje

我正在使用Spring Boot,并将尝试解释出现疑问的情况

想象一下,
MyObject
有一些其他对象组成它

public class MyObject {

    private Integer id;
    private MyObject2 obj2;
    private MyObject3 obj3;
    private MyObject4 obj4;

    // getters and setters ...

}
其中一些字段由
MyObject
组成

假设
MyObject2
MyObject
作为一个字段,在双方之间建立某种关系。(例如:许多人)

防止无限递归的逻辑是通过设置为
null
,从
MyObject2
中删除
MyObject2
引用上的所有
MyObject2
引用

我的助手班负责这项工作,但是,我应该把它称为哪里呢

在我的控制器中:

public ResponseEntity<?> handleRequestOfRetrieveAllMyObject2() {
    List<MyObject2> objs2 = obj2Service.findAll();
    objs2.forEach(obj2 -> obj2.getObjs().forEach(obj -> Helper.buildPrettyMyObject(obj)));

    return ResponseEntity.ok(objs2);
}
public ResponseEntity HandlerRequestoreFretrieveAllMyObject 2(){
List objs2=obj2Service.findAll();
forEach(obj2->obj2.getObjs().forEach(obj->Helper.buildpretymyobject(obj));
返回响应正确(objs2);
}
为我服务:

public List<MyObject2> findAll() {
    List <MyObject2> objs2 = obj2Repository.findAll();
    objs2.forEach(obj2 -> obj2.getObjs().forEach(obj -> Helper.buildPrettyMyObject(obj)));

    return objs2;
}
公共列表findAll(){
List objs2=obj2Repository.findAll();
forEach(obj2->obj2.getObjs().forEach(obj->Helper.buildpretymyobject(obj));
返回objs2;
}
它应该是服务层的作业,还是控制器层的作业?

我在控制器层执行此操作,因为控制器负责将响应返回给客户机,而服务层应该只执行业务规则,并且必须是可重用的

我做错了吗

我在控制器层这样做,因为控制器是 负责将响应返回给客户和服务 层应该只执行业务规则,并且必须是可重用的。我在做什么 这不对吗

你做得对。这是一个表示/序列化方面的问题,因此控制器层是这方面的理想候选者。但这是一个你可以花上几天甚至几周的时间来讨论的问题。你做得对,继续前进

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;
}