Как создать метод по умолчанию в SpringMVC, используя аннотации? - PullRequest
9 голосов
/ 25 июля 2010

Я не могу найти решение этой проблемы, и это сводит меня с ума. У меня есть @Controller mapped, который отвечает на несколько методов, использующих @RequestMapping. Я хотел бы пометить один из этих методов по умолчанию, когда не указано ничего более конкретного. Например:

@Controller
@RequestMapping("/user/*")
public class UserController {

   @RequestMapping("login")
   public String login( MapModel model ) {}

   @RequestMapping("logout")
   public String logout( MapModel model ) {}

   @RequestMapping("authenticate")
   public String authenticate( MapModel model ) {}
}

Итак / user / login -> метод входа в систему, / user / logout -> logout и т. Д. Я хотел бы сделать так, чтобы, если кто-то заходит в / user, он перенаправлялся на один из этих методов. Однако в @RequestMapping я не вижу ничего, что позволило бы мне указать один из этих методов в качестве обработчика по умолчанию. Я также не вижу других аннотаций, которые могли бы быть использованы в классе, чтобы сделать это. Я начинаю подозревать, что его не существует.

Я использую Spring 2.5.6. Это решено в 3.0.0? Я мог бы просто взломать Spring, чтобы заставить его работать, потому что это чрезвычайно раздражает, это не так просто.

Заранее спасибо.

Ответы [ 4 ]

13 голосов
/ 25 июля 2010

Посмотрите на этот ответ:

Spring MVC и проблема с аннотированными контроллерами

Что если вы аннотируете метод с помощью:

@RequestMapping(method = RequestMethod.GET)

Вы можете увидеть пример здесь:

Spring 3.0 MVC + Hibernate: упрощено с аннотациями - Учебное пособие

Такое же поведение можно увидеть здесь:

Spring Framework 3.0 MVC от Аарона Шрама (см. Стр. 21)

5 голосов
/ 31 декабря 2012

Краткий ответ: я не знаю, как просто указать один метод по умолчанию с простым тегом.

Но есть это ...

Я не знаю, в какой версии Spring это было реализовано, но вы можете предоставить несколько value с @RequestMapping в 3.1.2. Итак, я делаю это:

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping(value = {"", "/", "/list"}, method = RequestMethod.GET)
    public String listUsers(ModelMap model) { }

    @RequestMapping(value = "/add", method = RequestMethod.POST)
    public ModelAndView add(HttpServletRequest request, ModelMap model) { }

}

Следующие URL затем сопоставляются с listUsers():

0 голосов
/ 20 июля 2017

Простое использование @RequestMapping("**") в вашем методе по умолчанию должно работать.Любые более конкретные сопоставления все равно должны забирать их запросы.Я использую этот метод для настройки методов по умолчанию иногда.В настоящее время используется Spring v4.3.8.RELEASE.

0 голосов
/ 26 марта 2015

Я бы создал один метод по умолчанию без значения RequestMapping. Пожалуйста см. Метод defaultCall () ниже. Затем вы можете просто позвонить им с URL: [ваше имя_хоста] / user

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping(method = RequestMethod.GET)
    public String defaultCall( MapModel model ) {
        //Call the default method directly, or use the 'forward' String. Example:
        return authenticate( model );
    }

    @RequestMapping("login")
    public String login( MapModel model ) {}

    @RequestMapping("logout")
    public String logout( MapModel model ) {}

    @RequestMapping("authenticate")
    public String authenticate( MapModel model ) {}
}

Ссылка: Сопоставление запросов Spring Framework

...