0

=(から解決しようとするポイントがわからない問題に直面しました。RESTサービス用のシンプルなアプリがあります。サービスクラスでSpring @Autowiredを使用しているため、部分的にSpringと統合する必要がありました。

web.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">


    <display-name>RESTful service</display-name>

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

    <!-- RESTful web-service -->
    <servlet>
        <servlet-name>jersey-servlet</servlet-name>
        <servlet-class>
            com.sun.jersey.spi.container.servlet.ServletContainer
        </servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>training.rest.service</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>jersey-servlet</servlet-name>
        <url-pattern>/ws/*</url-pattern>
    </servlet-mapping>

    <!-- SPRING CONTEXT -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/springServlet/appServlet/mvc-servlet.xml,
            /WEB-INF/db/db-cfg.xml,
            /WEB-INF/springServlet/application-security.xml
        </param-value>
    </context-param>


    <!-- SPRING SECURITY -->
    <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>


    <!-- other -->
    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>

</web-app>

このような web.xml 構成では、次のような JSON 形式でオブジェクトを返すサービス メソッドを使用できます。

@GET
@Path("/get")
@Produces(MediaType.APPLICATION_JSON)
public User readUser() {
    User user = new User();
    user.setLogin("login QQ");
    user.setPassword("passw QQ");
    return user;
}

しかし、次のような方法を使用したい場合:

@GET
@Path("{login}")
@Produces(MediaType.APPLICATION_JSON)
public User readUser(@PathParam("login") String login) throws SQLException {
    User user = userDao.findByLogin(login);
    return user;
}

そのサービス クラスで userDao を自動配線する必要があります。しかし、web.xml の Servlet Dispatcher を

com.sun.jersey.spi.container.servlet.ServletContainer

com.sun.jersey.spi.spring.container.servlet.SpringServlet

しかし、その場合、以前の方法で JSON を取得しようとすると、次のようになります: 内部サーバー エラーと

Caused by: com.sun.jersey.api.MessageException: A message body writer for Java class training.rest.entity.User, and Java type class training.rest.entity.User, and MIME media type application/json was not found
    ... 52 more

そのため、アプリの他の部分は変更されません。サーブレットディスパッチャーを変更しました。もちろん、context.xml に Bean の記述があります。

ヒントをいただければ幸いです。重要な情報を見逃していたら申し訳ありません。私は質問するのが初めてで、情報が殺到したくありません =)

4

2 に答える 2