2012-10-03 19 views
12

Con Spring MVC, sé cómo se configura el RequestMapping en cada controlador y método/acción.Spring MVC Request mapping, ¿puede ser dinámico/configurable?

Pero lo que si quería que esto es configurable, así que por ejemplo I los siguientes controladores:

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

Ahora en mi solicitud, el administrador puede configurar 2 blogs para el webiste, y 1 artículo de la sección por lo que la URLs serían como:

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

Tal vez después de un tiempo, el administrador desea otra sección del artículo, por lo que acaba de configurar que con una nueva sección como:

www.example.com/article_section2/ 

Esto tiene que funcionar dinámicamente/sobre la marcha sin tener que reiniciar la aplicación, por supuesto.

Mi pregunta solo tiene que ver con la forma en que manejaré las asignaciones de URL a mis controladores.

¿Cómo sería esto posible con Spring MVC?

Solo sé cómo asignar URL a los controladores usando @RequestMapping("/helloWorld") en el nivel de controlador o método, pero esto hace que las asignaciones de URL sean fijas y no configurables como yo lo deseo.

Actualización:

que va a almacenar los caminos en la base de datos, y con la asignación al tipo de controlador, de modo parecido:

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

Con la información anterior, ¿cómo podría despachar la solicitud al controlador correcto?

Una vez más, sin mirar para recargar/redistribuir, y darse cuenta de esto requerirá más trabajo pero está en la especificación :)

+1

¿Cómo terminaste implementando esto? Estoy en una situación similar. – DairyLea

Respuesta

5

Que este tipo de URL de trabajo de mapeo para usted?

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

Si es así, entonces eso es fácil: Primavera 3 soporta variables de ruta: http://static.springsource.org/spring/docs/3.0.x/reference/mvc.html#mvc-ann-requestmapping-advanced

Como alternativa, puede crear una asignación de solicitud genérica y su propio sub-despachador que lee un archivo de configuración, pero yo creo que es probablemente más trabajo de lo que vale.

+3

Quiero un control completo sobre la url, sé acerca de las variables de ruta gracias. De hecho, voy a leer las rutas desde la base de datos y luego reenviar las solicitudes al controlador correcto, pero no estoy seguro de cómo. – loyalflow

0

¿no funciona? @RequestMapping ("/ helloWorld *")

2

Realmente cambiar las asignaciones de solicitudes en el tiempo de ejecución puede ser difícil (y no muy recomendable, ya que pequeños errores pueden ocurrir fácilmente). Si aún desea hacerlo, tal vez JRebel, y más específicamente LiveRebel puede ser interesante para la redistribución de código y configuración en vivo.

De lo contrario, al igual que otras publicaciones sugeridas, RequestMappings admite comodines, los límites de esto deben quedar claros después de una lectura rápida de la documentación oficial.

+2

no Quiero un control completo sobre la URL, por lo que esto no funcionará, y no quiero volver a cargar/volver a implementar ningún código. estaba esperando poder de alguna manera reenviar la solicitud al controlador correcto de alguna manera. – loyalflow

+3

Escribir su propio HandlerMapping podría ser interesante http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/servlet/HandlerMapping.html –

+0

gracias por ese enlace, esto parece ser la dirección que tendré que tomar dados los requisitos. – loyalflow

1

Trate de usar con @RequestMapping comodines de la siguiente manera:

@RequestMapping(value="/article_section*/"} 
public void getArticle(....){ 
//TODO implementation 
} 

@RequestMapping(value="/blog*/"} 
public void getBlog(....){ 
//TODO implementation 
} 

Esperanza esto ayuda !!!