我有一个 Java Web 应用程序,目前我有两个 Controller 。
一个 Controller 用于 REST 调用,另一个 Controller 用于将 ModelAndView(使用 Spring MVC)对象传递到 View 。
我担心的是,这两种方法都引用相同的服务层调用。我是否应该创建一个包含与服务层交互的代码的抽象类?
REST Controller 是否应该与其他 Controller 合并?
最佳答案
我会确保 Controller 中没有任何逻辑。 Controller 应该只收到请求,调用另一个方法(位于服务层 - 比 API 层更低的层)并以合适的格式返回数据。
例如:
public class MyServiceLayer() {
public List<SomeObject> getAllSomeObjects() {
// Do some logic to get the object back
}
}
然后你就可以拥有一个像这样的 Controller :
@Controller
public class MyController {
@Autowired
private MyServiceLayer myService;
// Put annotation for getting it in Json
public List<SomeObject> getAllSomeObjectsInJson() {
return myService.getAllSomeObjects();
}
// Put annotation for getting the view data
public ModelAndView getAllSomeObjectsView() {
// Return your ModelAndView here.
}
}
在这种情况下,如果您愿意的话,也可以将其拆分为 2 个 Controller 。
无论如何,你不应该有 2 个带有重复代码的 Controller - 这很糟糕!而且您不应该被迫将 2 个不同的 Controller 合并为一个。这就是为什么您应该将逻辑转移到不同的打包层。
通过这种方式,您还可以遵循“做一件事原则”,即一个类应该有一个目的。在这种情况下,MyServiceLayer
有一个目的 - 处理获取对象的逻辑。 Controller 层有一个目的 - 传输数据(以您想要的任何格式)。
例如,如果明天您想要添加 JMX API,您无需复制代码或扩展原始 Controller 。只需添加另一个类来处理 JMX 调用并使用 MyServiceLayer
关于java - 我的 REST 方法应该有一个单独的 Controller 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23813174/