Как использовать заголовки @RequestMapping? - PullRequest
4 голосов
/ 26 июля 2010

Я учусь Springmvc. Когда я использую @RequestMapping(value="/helloWorld", headers = "content-type=text/*") и подключаюсь к http://localhost:8080/SpringMVC_10100/helloWorld, в консоли выводится следующее:

WARN org.springframework.web.servlet.PageNotFound - Не найден соответствующий метод обработчика для запроса сервлета: путь '/helloWorld', метод 'GET', параметры map[[empty]]

Мой код:

@Controller
public class HelloWordController {
    private Logger logger = LoggerFactory.getLogger(HelloWordController.class);

    @RequestMapping(value="/helloWorld", headers = "content-type=text/*")
    public ModelAndView helloWorld() {
        logger.debug("jin ru le");
        logger.info("The helloWorld() method is use");
        ModelAndView view = new ModelAndView();
        view.setViewName("/helloworld");
        return view;
    }
}

web.xml - это

<servlet>
    <description>This is Spring MVC DispatcherServlet</description>
    <servlet-name>SpringMVC DispatchServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <description>SpringContext</description>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>SpringMVC DispatchServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

Почему?

Ответы [ 2 ]

2 голосов
/ 26 июля 2010

Скорее всего, случай / helloworld не находится внутри пути, настроенного для вашего сервлета-диспетчера

Например, если у меня сервлет настроен так:

  <servlet>
    <servlet-name>BMA</servlet-name>
    <servlet-class>
       org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>2</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>BMA</servlet-name>
    <url-pattern>/bma/*</url-pattern>
  </servlet-mapping>

И у меня естьКонтроллер настроен так:

@RequestMapping(value = "/planner/plan/{planId}/delete", method = RequestMethod.GET)
public ModelAndView deletePlanConfirm(HttpServletRequest request,  
       @PathVariable("planId")   Long planId)   {}

Тогда запрос в браузере будет:

http://localhost:8080/bma/planner/plan/1223/delete

Редактировать: Также, если у вас есть сужение заголовка типа контента в вашем обработчике,убедитесь, что хедер типа контента отправлен в вашем запросе.

1 голос
/ 01 июня 2016

В приведенной ниже аннотации удалите заголовки:

@RequestMapping(value="/helloWorld", headers = "content-type=text/*")

до:

@RequestMapping(value="/helloWorld",  method = RequestMethod.GET)

или до:

@RequestMapping(value="/helloWorld")

должно заставить его работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...