Вы можете установить как URL-адрес сопоставления для одной и той же функции, так и идентификатор id как необязательный.
@RequestMapping(method=RequestMethod.GET, value={"/campaigns","/campaigns/{id}"})
public String getCampaignDetails(Model model,
@RequestParam(value="id", required=false) Long id,
@PathVariable("id") Long id2)
{
}
хотя он будет отображаться также, когда идентификатор не отправляется, но вы можете управлять этим внутри метода.
РЕДАКТИРОВАТЬ : предыдущее решение не работает, потому что @PathVariable
не установлено в null
, когда нет {null}
, и не может сопоставить URL (спасибо ngeek). Тогда я думаю, что единственно возможное решение - создать два метода, каждый из которых сопоставлен со своим @MappingRequest
, и внутри одного из них вызовет другую функцию или перенаправит на другой URL-адрес (redirect: или forward: Spring prefixes). Я знаю, что это решение не то, что вы ищете, но думаю, что это лучшее, что вы можете сделать. На самом деле вы не дублируете код, но создаете другую функцию для обработки другого URL.