Могут ли преобразованные @PathVariables ссылаться друг на друга? - PullRequest
0 голосов
/ 26 октября 2011

У меня есть Spring @RequestMapping с парой @PathVariable s, и первое необходимо сузить до второго - вы можете увидеть в приведенном ниже примере, что мне нужно, чтобы отдел Чтобы получить Модуль. Используя обычный String @PathVariable s, я могу сделать это так:

@RequestMapping("/admin/{dept}/{mod}/")
public String showModule(@PathVariable String dept, @PathVariable String mod) {
    Department department = dao.findDepartment(dept);
    Module module = department.findModule(mod);
    return "view";
}

Но я хочу использовать Converter API Spring, чтобы можно было указать Department непосредственно как @PathVariable. Так что это работает после того, как я зарегистрировал пользовательский класс Converter:

@RequestMapping("/admin/{dept}/")
public String showDept(@PathVariable Department dept) {
    return "view";
}

Но API-интерфейс Converter не предоставляет доступа вне одного преобразуемого аргумента, поэтому невозможно реализовать Converter для Module. Есть ли другой API, который я могу использовать? Я смотрю HandlerMethodArgumentResolver - кто-нибудь решил проблему, подобную этой, или вы придерживаетесь String @PathVariables?

Я использую Spring 3.1.

1 Ответ

1 голос
/ 29 октября 2011

Я не сделал это так, но я подумал о том, чтобы сделать отдельный конвертер для них обоих:

@RequestMapping("/admin/{deptAndModule}/")
public String showDept(@PathVariable DepartmentAndModule deptAndModule) {
    return "view";
}

И иметь конвертер, способный принимать вход в виде"deptid-modid", например, "ch-c104".Невозможно отделить их косой чертой, поскольку запрос не будет соответствовать шаблону RequestMapping /admin/*/.

В моем случае требования немного изменились, так что коды модулей полностьюуникален и не должен быть ограничен до отдела.Так что мне больше не нужно это делать.Если бы я это сделал, я бы, вероятно, отказался от автоматического преобразования модулей и сделал бы это вручную в методе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...