Je construis un api de repos pour une webapp et j'ai rencontré un problème avec RequestMapping.Spring MVC RequestMapping correspond à une mauvaise URL
Fondamentalement, il existe des utilisateurs, qui sont regroupés dans différents domaines. Quand ils travaillent avec le système, certaines informations sont stockées dans un objet appelé «session» et écrites dans DB.
J'ai les URL suivantes:
1) http://server.com/api/v1/domain/ domainName/sessions - affiche des informations sur toutes les sessions pour tous les utilisateurs d'un domaine.
2) http://server.com/api/v1/domain/ domainName/user/userName/sessions - afficher des informations sur les sessions d'utilisateur particulier.
J'utilise le printemps 3.0.5 et déclaré 2 gestionnaires dans ma classe de contrôleur:
@RequestMapping(value = "/{domainId}/sessions", method=RequestMethod.GET)
public void findSessions(@PathVariable final String domainId) {
...
}
@RequestMapping(value = "/{domainId}/user/{username}/sessions", method=RequestMethod.GET)
public void findUserSessions(
@PathVariable final String domainId,
@PathVariable final String username) {
...
}
J'utilise des contrôleurs mixtes applications: SimpleUrlHandlerMapping + Annotations
chemin de base pour le contrôleur est spécifié en utilisant SimpleUrlHandlerMapping:
<property name="mappings">
<value>
/api/v1/domain/** = api.DomainsController
</value>
</property>
le problème est que les deux URL sont traitées par la première méthode. Pour l'URL 2, le nom d'utilisateur est lié à domainId pathvariable, donc la logique de la méthode de freinage. Mais, si je spécifie le chemin complet dans le mappage des requêtes, cela fonctionne correctement.
@RequestMapping(value = "/api/v1/domain/{domainId}/sessions", method=RequestMethod.GET)
@RequestMapping(value = "/api/v1/domain/{domainId}/user/{username}/sessions", method=RequestMethod.GET)
Eh bien, ce n'était pas aussi simple que de supprimer l'entrée SimpleUrlHandlerMapping et d'ajouter @RequestMapping, mais après quelques recherches sur internet j'ai enfin réussi à les divorcer. (Je ne peux pas abandonner totalement SUHM parce qu'il y a d'autres contrôleurs 'legacy'). Cela fonctionne correctement maintenant avec DefaultAnnotationHandlerMapping – dvd
HI, Pourriez-vous s'il vous plaît me dire l'utilisation de {} accolades dans l'URL RequestMapping. –
@AravindRPillai ils sont utilisés pour spécifier des variables de chemin. – Willa