Весна и Джерси отдых API вернулись 404 - PullRequest
0 голосов
/ 14 мая 2018

Я пытался сделать отдых API с весны и майки.это мой файл web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>Jersey Spring Web Application</servlet-name>
        <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Spring Web Application</servlet-name>
        <url-pattern>/FjordRestApi/*</url-pattern>
    </servlet-mapping>
</web-app>

и это мой служебный файл:

package com.persistent.rest;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.persistent.entity.User;
import com.persistent.entity.UsersList;

@Path("/us")
@Component
public class UsersService {

    @Autowired
    SessionFactory sessionFactory;

    @GET
    @Transactional
    @Path("/getUsers")
    @Produces("application/json")
    @SuppressWarnings("unchecked")
    public UsersList getUsers() {
        final Session session = sessionFactory.getCurrentSession();
        final Criteria criteria = session.createCriteria(User.class);
        criteria.add(Restrictions.eq("risk", 1));
        return new UsersList(criteria.list());
    }
}

, когда я использовал ServletRunner с методом getResponse следующим образом:

public void testFoo() {
    WebResponse response;
    try {
        response = getClient().getResponse("http://localhost:8282/FjordRestApi/us/getUsers");
        System.out.println(response.getText());
    } catch (Exception e) {
        e.printStackTrace();
    }

}

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.persistent</groupId>
    <artifactId>FjordRestApi</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>FjordRestApi</name>

    <build>
        <!-- <finalName>jerseySpringJPA</finalName> -->
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <inherited>true</inherited>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>7.1.5.v20100705</version>
                <configuration>
                    <webApp>${project.build.directory}/${project.build.finalName}.war</webApp>
                    <!--<systemPropertiesFile>${build.testOutputDirectory}/change-service.properties</systemPropertiesFile> -->
                    <stopPort>9966</stopPort>
                    <stopKey>foo</stopKey>
                    <webAppConfig>
                        <!--<contextPath>/v1</contextPath> -->
                    </webAppConfig>
                    <systemProperties>
                        <systemProperty>
                            <name>database.properties</name>
                            <value>file:${project.basedir}/target/test-classes/database.properties</value>
                        </systemProperty>
                        <systemProperty>
                            <name>jetty.port</name>
                            <value>${jetty.port}</value>
                        </systemProperty>
                    </systemProperties>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <properties>
        <spring.version>3.0.5.RELEASE</spring.version>
        <jersey.version>1.1.4.1</jersey.version>
        <!-- Avoids MacRoman encoding on OSX -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <jetty.port>8282</jetty.port>
    </properties>

    <dependencies>

        <!-- Unit Testing -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8</version>
        </dependency>
        <dependency>
            <groupId>httpunit</groupId>
            <artifactId>httpunit</artifactId>
            <version>1.7</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>org.springframework.test</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>

        <!-- Jersey -->
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-server</artifactId>
            <version>${jersey.version}</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-client</artifactId>
            <version>${jersey.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey.contribs</groupId>
            <artifactId>jersey-spring</artifactId>
            <version>${jersey.version}</version>
            <!-- These exclusions keep jersey-spring dependencies on spring 2.0 from 
                getting resolved by maven -->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-web</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-beans</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>org.springframework.web</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>org.springframework.transaction</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>org.springframework.context</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>

        <!-- Hibernate -->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>org.springframework.orm</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.8.0.GA</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>3.6.0.Final</version>
        </dependency>

        <!-- In Memory Database -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.34</version>
        </dependency>

        <!-- Logging -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.6.1</version>
        </dependency>

        <!-- Jersey Support for JSON -->
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-json</artifactId>
            <version>${jersey.version}</version>
        </dependency>

        <!-- This is LAST for a reason, dbunit dependencies load older versions 
            of log4j which causes issues with spring bean loader -->
        <dependency>
            <groupId>org.dbunit</groupId>
            <artifactId>dbunit</artifactId>
            <version>2.4.8</version>
        </dependency>

        <!-- My favorite java library -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>r08</version>
        </dependency>
    </dependencies>

    <repositories>
        <!-- Jersey Official Maven Repo -->
        <repository>
            <id>maven2-repository.dev.java.net</id>
            <name>Java.net Repository for maven</name>
            <url>http://download.java.net/maven/2/</url>
        </repository>
        <!-- Spring Official Maven Repo -->
        <repository>
            <id>com.springsource.repository.bundles.release</id>
            <name>EBR Spring Release Repository</name>
            <url>http://repository.springsource.com/maven/bundles/release</url>
        </repository>
        <repository>
            <id>com.springsource.repository.bundles.external</id>
            <name>EBR External Release Repository</name>
            <url>http://repository.springsource.com/maven/bundles/external</url>
        </repository>
        <!-- Hibernate Official Maven Repo -->
        <repository>
            <id>jboss-public-repository-group</id>
            <name>JBoss Public Repository Group</name>
            <url>http://repository.jboss.org/nexus/content/groups/public/</url>
        </repository>
    </repositories>

</project>

он вернул правильный текст json, но когда я перешел на URL-адрес напрямую, я получил ошибку 404, например, когда я запускаю запрос получения почтальона, я получил страницу ошибки 404.

консоль ничего не показывает, когда я выполнял вышеуказанные шаги.

что я могу сделать?tnx много

1 Ответ

0 голосов
/ 14 мая 2018

Я думаю, что в вашей конфигурации нужно добавить init-param для джерси (зависит от вашей версии джерси конечно). попробуйте добавить:

<servlet>
    <servlet-name>jersey-serlvet</servlet-name>
    <servlet-class>
        com.sun.jersey.spi.spring.container.servlet.SpringServlet
    </servlet-class>
    <init-param>
        <param-name>
          com.sun.jersey.config.property.packages
        </param-name>
        <param-value>your package</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

Я советую вам прочитать документацию по джерси для config провайдеров , если не работает (зависит от версии майки, попробуйте изменить com.sun.jersey.config.property.packages от jersey.config.server.provider.packages

...