从同一控制器的另一个REST端点直接调用REST端点(方法)是一种好习惯吗?

时间:2019-03-23 22:12:58

标签: java spring rest controller

我有一个Spring REST控制器类,它具有多个端点。从另一个端点直接调用端点方法是一种好习惯吗?

我已经用它搜索了一下,但是没有找到解决该问题的最佳实践的答案。

@RestController
public class DataContoller {

    @GetMapping("/dataA/{param}")
    public ResponseEntity getDataA(@PathVariable String param) {
     // logic to fetch data A
     return ResponseEntity.ok("A");  
    }

    @GetMapping("/dataB/{param}")
    public ResponseEntity getDataB(@PathVariable String param) {
     ResponseEntity response = getDataA("test");
     String result = response.getBody();
     return ResponseEntity.ok("B" + result);  
    }

}

原则上它是有效的,因为它只是另一个方法的方法调用,但是我想知道这是否是一个好习惯。如果不是很好的做法,那么理想的做法是什么。一种选择是使用RestTemplate。那是唯一的选择吗?

1 个答案:

答案 0 :(得分:3)

还不错,但是也不好。

问题是直接调用getDataA("test")会跳过通常在此控制器方法之前的所有内容:安全检查,验证,过滤,日志记录,映射或任何其他类型的数据操作。

它引入了不稳定性:您不确定输入什么数据以及它真正来自何处。它来自我的内部方法还是HTTP调用?

一个非常简单的建议是拥有一个服务方法getDataA并从两个控制器的方法中调用它。但是,您已经注意到,它不能完全替代HTTP请求。