Конфигурация отображения контроллера Spring - PullRequest
0 голосов
/ 18 марта 2012

У меня мало опыта по настройке Spring, и мне трудно это делать. То, что я пытаюсь сделать, это успешно сопоставить URL-адрес контроллера, используя аннотации. Кроме того, я хотел бы получить доступ к HttpRequest и, опционально, HttpResponse. Это потому, что я хотел бы использовать Джексона, чтобы писать и анализировать json напрямую в / из байтовых потоков. Теперь я знаю, что Spring имеет JSON-представления с использованием встроенного Джексона, но я хотел бы сначала получить приличную опору, так как теперь я не могу правильно настроить отображение.

web.xml

<display-name>Kerris 2</display-name>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/spring/*-config.xml
    </param-value>
</context-param>

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

приложение-confix.xml

<context:annotation-config />
<context:component-scan base-package="servlet" />

<bean
    class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

DayController

package servlet;

@Controller
@RequestMapping("/days/*")
public class DayController {

    private DayDAO dayDao;

    @RequestMapping(method = RequestMethod.GET)
    public @ResponseBody void test(HttpResponse response){
         System.out.println("Days GET");
    }

    @RequestMapping(method = RequestMethod.POST)
    public @ResponseBody void test2(HttpRequest request, HttpResponse response){
        System.out.println("Days POST");
    }

    public void setDaydao(DayDAO dayDao) {
        this.dayDao = dayDao;
        System.out.println("Days Dao assigned");
    }

}

Когда я просматриваю журнал сервера, я вижу там следующие строки

INFO: Mapped URL path [/days/*] onto handler 'dayController'
INFO: Mapped URL path [/days/*.*] onto handler 'dayController'
INFO: Mapped URL path [/days/*/] onto handler 'dayController'

Также, когда я тестирую приложение в contextroot / , я вижу стандартный Hello World! стр. Когда я пытаюсь contextroot / days / , я получаю 404. Когда я пытаюсь contextroot / days / test также 404. Может ли кто-нибудь указать мне на то, что я делаю неправильно?

1 Ответ

0 голосов
/ 18 марта 2012

Узнал, что я делал не так. Поскольку я n00b, я не осознавал, что должен специально определить DispatcherServlet, который передает запрос контроллеру.

web.xml

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/spring/*-config.xml
    </param-value>
</context-param>

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
  <servlet-name>api</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>api</servlet-name>
  <url-pattern>/api/*</url-pattern>
</servlet-mapping>

апи-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
   http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">



<context:annotation-config />
<context:component-scan base-package="servlet" />

<bean
    class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

</beans>

Когда я пытаюсь вызвать {contextroot} / api / days /, запрос достигает контроллера.

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