2016-10-25 4 views
0

Я использую Spring framework для создания api. Я хочу два адреса, определенные на уровне классаSpring @Requestmapping class level multiple

@RequestMapping({"/jobs","/subs"}) 

и я хочу вызвать метод 1, если URL является /host:port/jobs , и я хочу, чтобы вызвать метод 2, когда URL является /host:port/subs

Есть ли способ сделать это ?

Я мог удалить отображение на уровне класса и определить его на уровне метода, но я не хочу этого делать, поскольку я не хочу определять сопоставление для всех других методов.

+0

невозможно. Определите 'RequestMapping' для каждого метода. – dit

ответ

0

Вы можете использовать @PathVariable

@RequestMapping(value = "/{whichOne}") 
public class someController { 
    @RequestMapping 
    public ResponseObject someMethod(@PathVariable("whichOne") String whichOne) { 
     switch (whichOne) { 
      case "jobs": 
       return resolveJobs(); 
      case "subs": 
       return resolveSubs(); 
     } 
    } 
} 

Но я не рекомендую вам делать что. Два метода с двумя сопоставлениями запросов - правильный путь.

+0

Благодарим за помощь, но если вы используете переменную пути, у вас будут проблемы с использованием HATEOAS Links, вызвав этот метод. – Ashutosh

0
I don't want to have to define the mapping for all the other methods. 

Что вы имеете в виду? Как и любой другой класс, вы можете иметь методы в классе контроллера, который не сопоставляется ни с каким шаблоном URL.

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

+0

Я имел в виду, что другие методы будут иметь частичные URL-адреса, которые будут добавлены к URL-адресу уровня класса. – Ashutosh

0

Это действительно некрасиво, но вы можете сделать это с этим трюком:

@Controller 
@RequestMapping({ "/jobs", "/subs" }) 
public class MyController { 

    @RequestMapping(method = RequestMethod.GET) 
    public String get(HttpServletRequest request) { 

     String url = request.getRequestURI().toString(); 

     if (url.endsWith("jobs")) { // or contains 
      return getJobs(request); 
     } 

     // subs 
     return getSubs(request); 
    } 

    private String getJobs(HttpServletRequest request) { 
     [...] 
     return "jobs"; 
    } 

    private String getSubs(HttpServletRequest request) { 
     [...] 
     return "subs"; 
    } 
} 
+0

Единственная проблема заключается в том, что вспомогательные методы также имеют частичные URL-адреса. Но я попробую это с изменением дизайна. Спасибо за вашу помощь. – Ashutosh

Смежные вопросы