如何在 Spring Boot 中进行多个 URL 映射(别名)

Posted

技术标签:

【中文标题】如何在 Spring Boot 中进行多个 URL 映射(别名)【英文标题】:How to do Multiple URL Mapping (aliases) in Spring Boot 【发布时间】:2015-06-20 11:58:20 【问题描述】:

具体

我想在 spring boot 中做多 URL 映射(也就是别名)

详细说明

在我的 Spring Boot 应用程序中 客户控制器类主要映射到/customer URL,如下我想创建易于更改的别名

@Controller
@RequestMapping(value = "/customer")
public class CustomerController

在我在 XML 中进行映射的普通 Spring 应用程序中,我可以进行如下 URL 映射。

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
   <property name="mappings">
    <props>
       <prop key="/customer.htm">customerController</prop>
       <prop key="/tester.htm">customerController</prop>
     </props>
   </property>
</bean>

<bean id="customerController" 
    class="com. ... .controller.CustomerController" />

Spring boot,属性文件配置在大多数情况下都是有用的,因为自动配置在屋顶下工作。

    我有什么方法可以使用属性文件来做同样的事情。 在 Spring Boot 中进行 URL 映射时遵循的最佳做法是什么,我可以在编译后轻松更改。

我很累才找到这个。但最后还是得到了 SO 社区的帮助。请帮我解决这个问题。

【问题讨论】:

【参考方案1】:

如果你想从一个 prop 文件中导出映射,那么你可以这样做

在你的application.properties中,添加键值对

url.mapping : /test/sample

在控制器上,您可以执行以下操作:

@Controller
@RequestMapping(value =  "$url.mapping" )
public class CustomerController

而不是在prop文件中提供,如果您将url.mapping作为jvm arg提供,那么如果您更改值,则不必重新编译,只需重新启动(我希望您可以这样做,没有尝试过它自己)应该可以解决问题。

对于多个映射,您必须为每个映射添加一个,然后在控制器中进行映射,如下所示。

@Controller
@RequestMapping(value =  "$url.mapping","$url.mapping.two" )
public class CustomerController

【讨论】:

谢谢。这似乎是一种更清洁的方法。 @FarajFarook。接受可以帮助别人和我:)【参考方案2】:

看看this的例子。

映射 url 的最佳方法是在带有注释的控制器中进行。

基本上:

@RestController
public class HelloController 

    @RequestMapping("/")
    public String index() 
        return "Greetings from Spring Boot!";
    


恕我直言 最佳做法是为控制器使用一个映射,为每个方法使用一个映射:

    @RestController
    @RequestMapping("/Hello")
    public class HelloController 

        @RequestMapping("/")
        public String index() 
            return "Greetings from Spring Boot!";
        

        @RequestMapping("/otherMapping")
        public String otherMapping() 
            return "Greetings from Spring Boot!";
        
    

这样 url 看起来像:localhost:8080/Hellolocalhost:8080/Hello/otherMapping

编辑:

对于多个映射,您可以使用:

@RequestMapping( "/home", "/contact" )

【讨论】:

感谢您的回答。我更新了我的问题。我需要做多个 URL 映射,比如别名。我宁愿在不重新编译的情况下更改别名映射。 @FarajFarook 查看更新。 “不编译”部分我无能为力。 谢谢叶甫根尼。非常感谢您的帮助。我对你的回答投了赞成票。但是我会等待更多的 cmets 来查找是否有任何方法可以在不重新编译的情况下做到这一点:) 新注解也可以使用:@GetMapping("/path1"', "path2")

以上是关于如何在 Spring Boot 中进行多个 URL 映射(别名)的主要内容,如果未能解决你的问题,请参考以下文章

使用spring-boot在多个数据库之间进行数据迁移

如何在自定义反序列化器 Spring Boot 中读取路径变量或 URL 参数

在 Spring Boot 中创建 PROXY 服务,监听多个端口,并将 GET 请求重定向到新 URL

如何在spring boot项目中忽略特定URL的spring security CSRF

如何在 Spring Boot 中获取请求 URL

使用spring boot时如何通过在浏览器中点击URL来加载角度组件?