Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 在spring rest控制器之间实现通用方法的最佳实践是什么?_Java_Spring Boot_Annotations_Spring Restcontroller - Fatal编程技术网

Java 在spring rest控制器之间实现通用方法的最佳实践是什么?

Java 在spring rest控制器之间实现通用方法的最佳实践是什么?,java,spring-boot,annotations,spring-restcontroller,Java,Spring Boot,Annotations,Spring Restcontroller,我正在使用SpringREST控制器来实现我的WebAPI,我想把控制器之间的常用方法放在一个地方,这样就可以在我的所有控制器中使用 如果无法扩展@RestController注释,那么在父类BaseController中编写控制器通用方法并从中扩展我的所有控制器是否是一种好的做法?如果我理解正确,您要查找的是一个。它可以用来存储您可能需要的所有业务逻辑和常用方法。提取它们并将服务对象注入控制器。从那里,您只需从服务层调用您的方法,而不会污染控制器。根据我的经验,这样做被认为是一种很好的做法 对

我正在使用SpringREST控制器来实现我的WebAPI,我想把控制器之间的常用方法放在一个地方,这样就可以在我的所有控制器中使用


如果无法扩展
@RestController
注释,那么在父类
BaseController
中编写控制器通用方法并从中扩展我的所有控制器是否是一种好的做法?

如果我理解正确,您要查找的是一个。它可以用来存储您可能需要的所有业务逻辑和常用方法。提取它们并将服务对象注入控制器。从那里,您只需从服务层调用您的方法,而不会污染控制器。根据我的经验,这样做被认为是一种很好的做法

对于可以用于不同类型的控制器的方法,您可以做的另一件事是,正如您所说的,可以提取到实用程序类。您可以使用可以在整个应用程序中使用的静态方法来填充此类。

您可以创建自己的类,但如果您只想向控制器添加一些常用方法,则显然会增加开销。此外,您将使您的代码少一些“Spring标准”。我认为你不想那样

在父级中编写控制器通用方法是一种好的做法吗 类BaseController并从中扩展我的所有控制器

我不认为这是一种不好的做法,但在这里,我不想对控制器使用类继承:

  • 通用代码看起来像逻辑,而控制器不应该执行逻辑,而是委托。如果这些任务太多,那么引入一个服务类并委托给它
  • 如果控制器不共享一组公共字段/依赖项/初始化,那么使用提供公共方法的依赖项类可能更清晰/最简单。创建类的层次结构以避免声明公共字段似乎太多,而且子类化滥用
  • 您应该支持Spring AOP和ControllerAdvice,以便在控制器中进行预处理/预处理/处理和异常处理

如果你不属于这些情况,是的,为你的控制器设计一个抽象类看起来是个好主意

我的控制器需要诸如 -检查传入请求的参数 及 -在传出响应中包含标题

为了避免父/子控制器相互调用的样板文件,我利用了spring注释/挂钩

为了解析和验证请求参数,我采用了 控制器建议类,并用@ModelAttribute注释其中的方法 -哪个spring在route方法之前调用 及 -可用于使对象在模型中可用

为了在所有响应中包含头,我采用了扩展ResponseBodyAdvice的方法,在其中使用自定义注释,您可以使用控制器映射方法向控制器通知指示是否应该为该响应调用它

对我来说,这里的弱点是从控制器到响应建议的通信。
我采用了自定义带注释的控制器映射方法,在请求中设置一个属性,以供以后在响应建议中使用(并记录带注释的方法预期会这样做)。

是的,服务层是业务逻辑的场所,但我要寻找的是:例如,请求参数的自定义处理程序或控制器的某些实用程序函数,这些方法在我所有的controllersFor实用程序函数中都使用。我建议将它们提取到一个实用程序类中,该类中充满了静态方法,只需完成所需的任何操作。然而,我没有足够的经验肯定地说这是最佳实践。然而,据我所知,这并不是不赞成的。在这些方法真正属于控制器,而不仅仅是一些应该被移动到特殊类中的UTIL之前,让父控制器具有普通方法并没有什么错。