相同的前缀端点但有两个不同的控制器

8yoxcaq7  于 2022-10-23  发布在  Spring
关注(0)|答案(3)|浏览(127)

我记得在Django做的一个项目中,您可以创建可以被赋予前缀的路由,然后包括端点其余部分的另一个URL文件。

api_patterns= [
  url('foo/', include(foo.urls)),
  url('bar/', include(bar.urls)),
]

urlpatterns = [
  url(r'api/', include(api_patterns)),
]

该实现将导致端点M1N0O1P和M1N1O1P,并且这些端点将位于具有单独URL文件的单独目录中。

问题是我们是否可以实现相当于Spring Boot的东西。

我知道您可以在所有文件的@RequestMapping上添加前缀。但在我目前的项目中,我们有很多控制器从相同的路由前缀开始,然后,后来又彼此不同。

// Foo controller
@Controller
@RequestMapping(path = "api/foo")
public class FooController {

  @GetMapping(path = "")
  // Endpoint to /api/foo
}

// Bar controller
@Controller
@RequestMapping(path = "api/bar")
public class BarController {

  @GetMapping(path = "")
  // Endpoint to /api/bar
}

// Tar controller by foo
@Controller
@RequestMapping(path = "api/foo/tar")
public class TarController {

  @GetMapping(path = "")
  // Endpoint to /api/foo/tar
}

然后,端点将如下所示:/api/foo/api/bar/api/foo/tar
如何防止所有文件上的重复路径前缀?

  • 此路由可能是使用API终结点的糟糕做法,我也认为这是可以防止的,这就是为什么我要求作为初级开发人员在我的第一份工作中努力改进并表现出责任感。*
pgccezyw

pgccezyw1#

我认为最佳实践应该是这样的

/**
 * Class for String constants to use in the application
 */
public final class WebConstants {

   public static final String API = "api";
   ...other constants

}

@Controller
@RequestMapping(path = WebConstants.API + "/foo")
public class FooController {

  @GetMapping
  // serve something for /api/foo

  @GetMapping(path = "/tar")
  // serve something for /api/foo/tar

}

// Bar controller
@Controller
@RequestMapping(path = WebConstants.API + "/bar")
public class BarController {

  @GetMapping
  // Serve something for /api/bar
}
bf1o4zei

bf1o4zei2#

您可能需要粉碎具有相同终结点的控制器。我建议您保留这个注解@RequestMapping(path = "/api/foo"),只需在类中插入带有@GetMapping(path = "/tar")的方法。而其他方法可以使用前缀tar:"/tar/example"
但如果有很多方法以这个前缀/api/foo/tar开头,并且类FooController开始足够大,那么将它们分开保存是很好的。

tuwxkamq

tuwxkamq3#

您可以拥有如下所示的界面:
a1b0c1d
然后每个单独的控制器类都可以实现如下所示的接口:
a1b1c1d
假设有可能更改每个控制器类。

相关问题