RequestMapping не работает с многоуровневыми URL - PullRequest
1 голос
/ 14 сентября 2011

У меня есть сценарий, когда я делаю простой запрос на получение по ссылке, и моя конфигурация @RequestMapping работает не так, как я ожидал.

В теге привязки я ссылаюсь на URL со следующим шаблоном '/action-plan/export/pdf?token=xxx&taskId=1111&taskId=2222...'

В моем классе контроллера у меня есть это отображение на уровне класса:

@RequestMapping("/action-plan/export")

И это отображение на уровне метода

@RequestMapping(value="/pdf", method=RequestMethod.GET)
public String exportToPdf(@RequestParam("taskId") String[] taskIds,
            @RequestParam("token") String[] encryptedEmplId, ModelMap model)

Но каждый раз, когда я пытаюсь это сделать, я получаю сообщение об ошибке 404 page not found и следующее исключение Spring:

org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException: не найден соответствующий метод обработчика для запроса сервлета: путь '/ pdf', метод 'GET', карта параметров ['taskId' -> array ['1962326' , «1962264», «1962317», «1962328», «1962324», «1962427», «1962325», «1962323», «1963147», «1962327», «1962318», «1962329», «1962330»], 'token' -> array ['xxxx']]

Я заметил, что когда я удаляю "/ pdf?" часть ссылки и удалите 'value = "/ pdf"' из метода @RequestMapping, он работает нормально. Я не понимаю, почему добавление / pdf к URL-адресу и RequestMapping не работает.

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

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

Я работал над другим проектом и выяснил, почему вышеупомянутое не работает,В связи с моим первоначальным вопросом здесь приведено соответствующее отображение сервлета web.xml:

<servlet-mapping>
    <servlet-name>spring-dispatcherServlet</servlet-name>
    <url-pattern>/action-plan/export/*</url-pattern>
</servlet-mapping>

Я заметил, что любая часть пути, которую я включил в файл web.xml, не включалась в оценку RequestMapping.ценности.Я бы подумал, что эта конфигурация bean помешала бы этому сценарию (обратите внимание на свойство AlwaysUseFullPath):

<bean id="annotationHandlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="order" value="2"/>
        <property name="alwaysUseFullPath" value="true"/>
</bean>

Может быть, кто-то может пролить свет на эту деталь для меня.

В любомдело, спасибо danny.lesnik

0 голосов
/ 15 сентября 2011

Я заново создал вашу проблему и решил ее, сопоставив сервлет с использованием расширений .action.

Например:

@Controller
@RequestMapping(value="/test")
public class DefaultController {

    @RequestMapping(value="/pdf.action", method=RequestMethod.GET)
    public ModelAndView indexView(@RequestParam("taskId") String[] taskIds,
            @RequestParam("token") String[] encryptedEmplId){
        ModelAndView mv = new ModelAndView("index");
    return mv;
    }

Spring XML mapping:

<context:annotation-config />
<context:component-scan base-package="com.vanilla.controllers" />

<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>

иэто отображение сервлета web.xml

 <display-name>SpringMvcServlet</display-name>
   <servlet>
    <servlet-name>SpringMvcServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMvcServlet</servlet-name>
    <url-pattern>*.action</url-pattern>
  </servlet-mapping>

Этот код разрешает этот URL

/ test / pdf.action? token = 3 & token = 4 & taskId = 4

безупречно.

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