【问题标题】:Spring Boot request mappings best practicesSpring Boot 请求映射最佳实践
【发布时间】:2020-04-19 21:24:03
【问题描述】:

我一直在研究 Spring Boot,在我完成的教程中,请求映射如下所示:

@GetMapping("/hello")

如果映射在其他地方被引用,则通过重复相同的字符串来完成:

.antMatchers("/hello").permitAll()

在我看来,大型应用程序可能会变得混乱,所以我想知道是否有“每个人”都在做一些事情来组织它,并避免重复字符串以及因拼写错误等问题而出现的问题。

【问题讨论】:

标签: spring-boot


【解决方案1】:

据我所知,没有灵丹妙药。确保正确构建应用程序。我发现将所有控制器放在同一个包中会有所帮助。我也尽量保持每个控制器相对较小。

在设计和命名控制器时要小心,可能会减轻一些潜在的未来痛苦。 例如:

  • CustomerController
  • InvoiceController
  • OrderController
  • ProductController

您还应该启用 Spring boot 以在启动时记录所有端点。硒this answer

另一种选择是尝试https://spring.io/guides/gs/rest-hateoas/

【讨论】:

  • 无论我如何选择组织它们,似乎记录和测试端点都是要走的路。谢谢。
【解决方案2】:

你可以像这样组织你的网址

    public class UrlConstant {

        public static final String ID_PLACEHOLDER = "/{id}";

        public static class HelloUrl {

            public static final String URL = "/hello";

            public static class Path {

                public static final String TEST = "/test";

            }

            public static class QueryParam {

                public static final String PARAM1 = "param";

            }
        }

    }

【讨论】:

    【解决方案3】:

    通常你可以添加

    public static final HELLO_URI = "/hello"

    并在需要的地方导入这个变量

    这可以保护您在项目更改后避免出现问题

    你可以将它添加到一些包含常量的类或你的 RestController 类中

    【讨论】:

      【解决方案4】:

      在我一直在处理的应用程序中,它通常是混合的。

      首先,您不需要指定每个端点。大多数情况下,它会受到根 URL 的保护,例如 /api/**
      其次,在控制器中使用常量,并使用前缀 URL 注释它,您将使用 @RequestMapping(UserController.PREFIX) 并在 WebSecuritymvcMatchers(UserController.PREFIX) 中使用相同的常量。

      顺便说一句,最好使用mvcMatchers 而不是antMatchers。查看 spring 安全文档以获取更多信息。

      【讨论】:

        猜你喜欢
        • 2023-03-18
        • 2020-03-08
        • 2019-11-25
        • 1970-01-01
        • 2018-11-01
        • 2021-07-24
        • 2023-03-16
        • 1970-01-01
        • 2021-05-07
        相关资源
        最近更新 更多