2015-01-14 2 views
1

У меня есть класс следующим образом:SpringMVC: как получить значение @RequestMapping в функции

@Controller 
@RequestMapping("/path1") 
public class MyController 
{ 
    @RequestMapping(value = "/path2", method = RequestMethod.GET) 
    public ModelAndView func(ModelAndView mav) 
    { 
     String path = getRequestMappingValue(); // Here I expect a function which returns "/path1/path2" 
     mav.setViewName(path + ".jsp"); 
     return mav; 
    } 
} 

Что требуется функция getRequestMappingValue(), которая возвращает значение аннотаций @RequestMapping (в в этом случае это «/ path1/path2»)

+0

в одну сторону будет –

+0

@JigarJoshi Не могли бы вы объяснить более подробно? Я новичок в Java и SpringMVC. – zccoding

+2

Для этого нет веских оснований. Если у вас есть JSP в 'something/path1 /', называемом 'path2.jsp', просто напишите это в' setViewName'. Не заставляйте его зависеть от некоторых других метаданных. –

ответ

0

Весь смысл MVC - это запросы сопоставления, например /user/brian, методам контроллера, которые выполняют действия (например, showUser(Model model)) и возвращают представления. Попытка угадать имя представления, основанное на некотором значении в запросе, кажется мне запахом кода.

Возможно, вы могли бы объяснить немного больше своего случая использования?

я бы лично полагаться на это (я думаю, что это не рекламируемая особенность структуры), но вы можете получить путь в пределах текущего отображения обработчика, как это:

@Controller 
@RequestMapping("/path1") 
public class MyController { 

    @RequestMapping(value = "/path2") 
    public String myAction(Model model, HttpServletRequest request) { 

     String path = request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE); 
     // do something 
     return "viewName"; 
    } 
} 

Пожалуйста, обратитесь to the javadoc:

Note: This attribute is not required to be supported by all HandlerMapping implementations. 
URL-based HandlerMappings will typically support it, but handlers should not necessarily expect 
this request attribute to be present in all scenarios. 
0

Разве это не решение here достичь довольно много, что вы ищете?

private final static String MAPPING = "/hello"; 

@RequestMapping(value = MAPPING) 
@ResponseBody 
public void helloMethod(AtmosphereResource atmosphereResource) { 
    // MAPPING accessible as it's stored in instance variable 
} 
Смежные вопросы