Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring MVC Request mapping, can this be dynamic/configurable?

With Spring MVC, I know how you set the RequestMapping in every controller and method/action.

But what if I wanted this to be configurable, so for example I the following controllers:

BlogController 
 - with methods for listing blogs entries, single entry, new, update, etc.
ArticleController
 - with methods for listing articles entries, single entry, new, update, etc.

Now in my application, the administrator can setup 2 blogs for the webiste, and 1 article section so the urls would be like:

www.example.com/article_section1/ - uses ArticleController
www.example.com/blog1/ - uses BlogController
www.example.com/blog2/ - uses BlogController

Maybe after a while the administrator wants another article section, so they just configure that with a new section like:

www.example.com/article_section2/

This has to work dynamically/on-the-fly without having to restart the application of course.

My question is only concerned with how I will handle url mappings to my controllers.

How would this be possible with Spring MVC?

I only know how to map urls to controllers using @RequestMapping("/helloWorld") at the controller or method level, but this makes the url mappings fixed and not configurable like how I want it.

Update:

I will be storing the paths in the database, and with the mapping to the type of controller so like:

path                  controller
/article_section1/    article
/blog1/               blog
/blog2/               blog
..

With the above information, how could I dispatch the request to the correct controller?

Again, not looking to reload/redeploy, and I realize this will require more work but its in the spec :)

like image 988
loyalflow Avatar asked Oct 03 '12 14:10

loyalflow


People also ask

What is true about @RequestMapping annotation in Spring MVC?

The @RequestMapping annotation can be applied to class-level and/or method-level in a controller. The class-level annotation maps a specific request path or pattern onto a controller. You can then apply additional method-level annotations to make mappings more specific to handler methods.

Can two controllers have same request mapping?

You cannot. A URL can only be mapped to a single controller. It has to be unique.

What is RequestMapping in Spring MVC?

RequestMapping annotation is used to map web requests onto specific handler classes and/or handler methods. @RequestMapping can be applied to the controller class as well as methods. Today we will look into various usage of this annotation with example and other annotations @PathVariable and @RequestParam .

What is the difference between request mapping and GetMapping?

@RequestMapping is used at the class level while @GetMapping is used to connect the methods. This is also an important Spring MVC interview question to knowing how and when to use both RequestMapping and GetMapping is crucial for Java developers.


2 Answers

Would this sort of URL mapping work for you?

www.example.com/blog/1/
www.example.com/blog/2/

If yes, then that's easy: Spring 3 supports path variables: http://static.springsource.org/spring/docs/3.0.x/reference/mvc.html#mvc-ann-requestmapping-advanced

Alternatively, you can create a generic request mapping and your own sub-dispatcher that reads a config file, but I think that's probably more work than it's worth.

like image 75
parsifal Avatar answered Oct 05 '22 05:10

parsifal


Truly changing the request mappings at runtime might be hard (and not really recommended, since small errors can easily occur). If you still wish to do it, perhaps JRebel, and more specificly LiveRebel can be interesting for live redeployment of code and configuration.

Otherwise, like other posts suggested, RequestMappings supports wildcards, the limits of this should be clear after a quick read of the official documentation.

like image 45
Rasmus Franke Avatar answered Oct 05 '22 07:10

Rasmus Franke