Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > [Spring MVC 3] Необязательный параметр URL


Автор: Romper 10.5.2013, 12: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 есть другой способ ?

Автор: Farmazon 20.5.2013, 23:58
по-моему опциональными переменные пути быть не могут

Добавлено через 4 минуты и 28 секунд
вариант есть ещё самому из реквеста извлекать переменные пути а в маппинг регекс загнать... но лучше пусть так останется

Автор: Samotnik 21.5.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.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)