Spring MVC 3: одинаковое @RequestMapping на разных контроллерах с централизованным сопоставлением URL-адресов XML (гибридный подход xml /annotations)

Мне нравится хранить все мои сопоставления в одном месте, поэтому я использую XML-конфигурацию:

 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

    <property name="mappings">
        <value>
            /video/**=videoControllerr
            /blog/**=blogController
        </value>
    </property>
    <property name="alwaysUseFullPath">
        <value>true</value>
    </property>
</bean>

Если я создам второе сопоставление запроса с тем же именем в другом контроллере,

@Controller
public class BlogController {
    @RequestMapping(value = "/info", method = RequestMethod.GET)
    public String info(@RequestParam("t") String type) {
        // Stuff
    }
}

@Controller
public class VideoController {
    @RequestMapping(value = "/info", method = RequestMethod.GET)
    public String info() {
        // Stuff
    }
}

Я получил исключение:

Caused by: java.lang.IllegalStateException: Cannot map handler 'videoController' to URL path [/info]: There is already handler of type [class com.cyc.cycbiz.controller.BlogController] mapped.

Есть ли способ использовать одни и те же сопоставления запросов на разных контроллерах?

Я хочу, чтобы 2 URL были:

/video/info.html

/blog/info.html

Использование Spring MVC 3.1.1

EDIT: Я не единственный https://spring.io/blog/2008/03/24/using-a-hybrid-annotations-xml-approach-for-request-mapping-in-spring-mvc

Остальная часть приложения работает отлично.

4 голоса | спросил laffuste 29 J0000006Europe/Moscow 2012, 07:33:00

2 ответа


0

Просто поместите сопоставление запросов на уровне контроллера также:

@Controller
@RequestMapping("/video")
public class VideoController {
    @RequestMapping(value = "/info", method = RequestMethod.GET)
    public String info() {
        // Stuff
    }
}

@Controller
@RequestMapping("/blog")
public class BlogController {
    @RequestMapping(value = "/info", method = RequestMethod.GET)
    public String info(@RequestParam("t") String type) {
        // Stuff
    }
}
ответил Biju Kunjummen 29 J0000006Europe/Moscow 2012, 07:45:02
0
ответил gavenkoa 28 Jpm1000000pmMon, 28 Jan 2013 18:34:26 +040013 2013, 18:34:26

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132