[Spring MVC 3] Необязательный параметр URL

 
0
 
Java
ava
Romper | 10.05.2013, 13:09

@Controller
@RequestMapping("/page{number}")
public class IndexController {
    @RequestMapping(method = RequestMethod.GET)
    public String printIndex(ModelMap model, @PathVariable int number) {
        String numberText;

        switch (number) {
            case 0:
                numberText = "Zero";
                break;
            case 1:
                numberText = "One";
                break;
            default:
                numberText = "Unknown";
                break;
        }

        model.addAttribute("number", numberText);

        return "page";
    }
}

Пытаюсь сделать паттерн для таких ссылок: page1.html, page2.html, ..., но есть одно исключение: page.html, показывает тот же результат что и page1.html

пока только так

@Controller
public class IndexController {
    @RequestMapping("/page{number}")
    public String printIndex(ModelMap model, @PathVariable("number") int number) {
        String numberText;

        switch (number) {
            case 0:
                numberText = "Zero";
                break;
            case 1:
                numberText = "One";
                break;
            default:
                numberText = "Unknown";
                break;
        }

        model.addAttribute("number", numberText);

        return "page";
    }

    @RequestMapping("/page")
    public String printIndex(ModelMap model) {
        return printIndex(model, 1);
    }    
}


может в Spring есть другой способ ?
Ответы (2)
ava
Farmazon | 20.05.2013, 23:58 #
по-моему опциональными переменные пути быть не могут
ava
Samotnik | 21.05.2013, 21:26 #
Romper, Нельзя @PathVariable сделать опциональным, можно @RequestParam но в данной задаче тебе это не подойдет.
Поэтому выхода два:
1. Сделать два маппера:

    @RequestMapping(value = "page{number}", method = RequestMethod.GET)
    public String printIndex(@PathVariable("number") Integer number) {
        return processPrint(number);
    }

    @RequestMapping(value = "page", method = RequestMethod.GET)
    public String printWithoutIndex() {
        return processPrint(null);
    }

    private String processPrint(Integer number) {
        //тут обрабатывай все ситуации как хочешь, учитывая, что  для page.html параметр будет null
    }

2. Выдергивать из реквеста "в живую"  этот переметр и работать как с обычным String.
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить