Spring 4.0 MVC RequestMapping на уровне класса и метода

Я новичок в аннотации и изучении вещей. В моем образце программы... простой привет, мир с использованием аннотаций в spring 4.0.

Это код файла контроллера. У меня есть две аннотированные записи RequestMapping, т.е. одна на уровне класса, а другая на уровне метода:

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping(value = "/Hybrid")
public class HybridController {

    @RequestMapping(value = "/test", method = RequestMethod.GET)
    public String getDemo(String name) {
        System.out.println("/MVC/Demo");
        return "helloworld" ;
    }

}

Если я поставлю только уровень класса @RequestMapping, он будет работать с этим URL-адресом, подключающимся к .../SpringRS/Hybrid, или только с уровнем метода для подключения с использованием .../SpringRS/test, он отлично работает и отображает мне helloworld.jsp.

Но когда я пытаюсь объединить сопоставление запроса класса и метода и вызывать его, используя этот URL-адрес: .../SpringRS/Hybrid/test, это не работает.

Может ли кто-нибудь объяснить, что мне нужно, чтобы заставить его работать?

Посмотреть сопоставление распознавателя:

<context:component-scan base-package="com" />
<mvc:annotation-driven />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>WEB-INF/views/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
    </bean>

person Sree81    schedule 07.05.2014    source источник
comment
Вы уверены, что у вас не определены конфликтующие сопоставления URL-адресов? Можете ли вы включить ведение журнала отладки для весны, потому что это должно сказать вам, какой контроллер сопоставлен с каким URL-адресом.   -  person Praba    schedule 07.05.2014
comment
См. stackoverflow.com/questions/11203907/   -  person    schedule 16.08.2015


Ответы (1)


Я думаю, что в вашем web.xml у вас есть шаблон URL-адреса для DispatcherServlet как /Hybrid, который точно соответствует вашей аннотации на уровне класса. Если ваш запрос предназначен для .../Hybrid, он подбирается DispatcherServlet, поскольку это точное совпадение . Если ваш запрос предназначен для .../Hybrid/test, DispatcherServlet вообще не подхватывает его. Вместо этого, если ваш URL-шаблон заканчивается подстановочным знаком, таким как /something/*, запрос .../something/Hybrid/test будет сначала выбран DispatcherServlet, а затем передан контроллеру для разрешения.

person asha    schedule 09.03.2015