简体   繁体   中英

How to do Multiple URL Mapping (aliases) in Spring Boot

In specific

I want to do Multiple URL Mapping (in other words aliases) in spring boot

In Detail

In my spring boot application Customer Controller class has mapped primarily to the /customer URL as below I want to create easily changeable aliases

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

In my normal spring application where I do the mapping in the XML, I can do the URL mapping as below.

<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, property file configurations are helpful in most of the time as the autoconfig is working under the roof.

  1. Is there any way I can do the same using the property files.
  2. What is the best practice to follow when doing a URL mapping in spring boot which I can change easily after the compilation.

I tired alot to find this. But at the end ended up in the SO community help. Please help me on this.

If you want to drive mapping out of a prop file, then you can do it as below

In you application.properties, add the key value pair

url.mapping : /test/sample

On the controller you can the do the following:

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

Instead of providing in prop file, if you provide the url.mapping as a jvm arg , then you don't have to recompile if you change the value, just restart (which i hope you can do, have not tried it myself) should do the trick.

For multiple mappings, you will have to add one per mapping and map that in controller like below.

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

Take a look at this example.

The best way to map url is to do it in the controller with annotations.

Basically:

@RestController
public class HelloController {

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

}

IMHO The best practice is to use one mapping for the controller and one for every method:

    @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!";
        }
    }

That way urls will look like: localhost:8080/Hello and localhost:8080/Hello/otherMapping

Edit:

For multiple mappings you can use:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM