代码之家  ›  专栏  ›  技术社区  ›  devnull69

新泽西的Rest API:我缺少什么?

  •  0
  • devnull69  · 技术社区  · 7 年前

    我有一个正在工作的ServletMaven项目,我想用一个基于Jersey的Restapi来扩展它。

    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    
    @Path("/api")
    public class CheckHaveIBeenPwned {
    
        @GET
        @Produces( "text/html;charset=UTF-8" )
        public String whatever() {
            return "Hallo";
        }
    
    }
    

    在pom.xml中,我包含了以下jersey依赖项:

    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-core</artifactId>
      <version>1.19.1</version>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-client</artifactId>
      <version>1.19.1</version>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-server</artifactId>
      <version>1.19.1</version>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-json</artifactId>
      <version>1.19.1</version>
    </dependency>
    

    我的web.xml(本质上)如下所示:

    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" >
    
    <web-app>
      <display-name>Archetype Created Web Application</display-name>
      <servlet>
        <servlet-name>ExistingServletClass</servlet-name>
        <servlet-class>com.whatever.servlet.ExistingServletClass</servlet-class>
      </servlet>
      <!-- a few more (still working) servlet sections -->
      <servlet>
          <display-name>JAX-RS REST Servlet</display-name>
          <servlet-name>REST-Servlet</servlet-name>
          <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
          <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>REST-Servlet</servlet-name>
          <url-pattern>/rest/*</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>ExistingServletClass</servlet-name>
        <url-pattern>/existingservletclass</url-pattern>
      </servlet-mapping>
      <-- a few more (still working) servlet mappings -->
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
    

    但当我尝试调用API时(只需在浏览器中打开以下URL):

    https://my.url:8443/myapp/rest/api

    https://my.url:8443/myapp

    我错过了什么?我在另一个项目中做了一件非常相似的事情,并且成功了。但是,将Rest API添加到现有项目中会一直失败。。。

    1 回复  |  直到 7 年前
        1
  •  0
  •   devnull69    7 年前

    好吧,我不得不将pom.xml改为包含jersey bundle(不知道为什么,但现在它可以工作了):

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-bundle</artifactId>
        <version>1.19.1</version>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-server</artifactId>
      <version>1.19.1</version>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-core</artifactId>
      <version>1.19.1</version>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-client</artifactId>
      <version>1.19.1</version>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-json</artifactId>
      <version>1.19.1</version>
    </dependency>