Я строю остальные API для одного веб-приложения и столкнулся с проблемой с RequestMapping.
В основном есть пользователи, которые сгруппированы в разные домены.Когда они работают с системой, некоторая информация сохраняется в объекте с именем 'session' и записывается в БД.
У меня есть следующие URL:
1) http://server.com/api/v1/domain/domainName/sessions - показываетинформация обо всех сеансах для всех пользователей в домене.
2) http://server.com/api/v1/domain/domainName/user/userName/sessions - показать информацию о сеансах конкретного пользователя.
Я использую Spring 3.0.5 и имеюобъявил 2 обработчика в моем классе контроллера:
@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) {
...
}
Я использую смешанные сопоставления контроллера: SimpleUrlHandlerMapping + Annotations
Базовый путь для контроллера указывается с помощью SimpleUrlHandlerMapping:
<property name="mappings">
<value>
/api/v1/domain/** = api.DomainsController
</value>
</property>
Проблема в том, что оба URL обрабатываются первым методом.Для URL 2 имя пользователя связано с domainId pathvariable, таким образом, логика метода торможения.
Но, если я укажу полный путь в отображении запроса - он будет работать нормально.
@RequestMapping(value = "/api/v1/domain/{domainId}/sessions", method=RequestMethod.GET)
@RequestMapping(value = "/api/v1/domain/{domainId}/user/{username}/sessions", method=RequestMethod.GET)