【问题标题】:How to generate URL for Spring MVC method controller like ASP.Net MVC does?如何像 ASP.Net MVC 那样为 Spring MVC 方法控制器生成 URL?
【发布时间】:2019-10-24 07:58:04
【问题描述】:

ASP.Net MVC 包含有用的类 UrlHelper,使用它我可以像这样为我的方法控制器创建 URL:

var myUrl = helper.Generate<MySuperController>(x => x.MyAwesomeMethod(
     myCharmingParameter1, myPrettyParameter2));

helper 是 UrlHelper 实例。当我用 ReSharper 重命名 MyAwesomeMethod 时,它会在任何地方重命名,myUrl 会自动指向新位置。

我需要在 Spring MVC 中使用类似的功能:例如,当我更改方法上的 @GetMapping("/api/getFields") 注释中的值时。我不想在项目中的任何地方都替换为新的 url。我只想自动生成新的url。

如何到达?

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    一个快速的解决方案是使用属性文件中的参数或定义一个自定义属性配置类(在启动期间应用自定义命名,检查PropertySourcesPlaceholderConfigurer),它将值注入控制器中。 F.E 你可以把它定义为:

    @RequestMapping("${links.link1}")

    并且在属性文件中

    links.link1=/my/link

    类似的答案是here

    【讨论】:

    • 这不是我想要的。如果有人从 links.link1 更改为 links.mySuperPuperlink 会发生什么?是的,如果不手动修复,网址将被破坏。只有在运行时才知道,只有当这个链接有人试图点击时。可能会被单元测试发现,但是如果没有覆盖呢?在 ASP.Net MVC 中会在编译应用时发现,或者自动修复,没有任何错误。
    • 真的把你弄丢了,ASP是如何在编译时意识到一个URL被破坏的????它只是一个绑定参数,所以如果你放错了 url 绑定,当你点击它时你仍然会知道它.....?我错过了什么吗?
    • ASP.Net 使用反射生成 url。 Url 助手具有控制器类型的通用参数和方法的 lambda。如果在生成 url 时重命名方法(没有 ReSharper)并且没有修复 lambda,则会出现编译错误:找不到方法。如果您使用 ReSharper 重命名方法,方法名称将被到处替换,所以它会正常工作。现在你明白我的意思了吗?
    • 嗯好的,现在我明白了你的意思,这与 Spring 实例化控制器的方式有点不同。看看here,可能会有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多