【问题标题】:The ResourceConfig instance does not contain any root resource classes exception in REST APIResourceConfig 实例不包含 REST API 中的任何根资源类异常
【发布时间】:2018-04-29 13:14:53
【问题描述】:

我正在尝试运行我在 java 中构建的 REST Api;但是我得到的 ResourceConfig 实例不包含任何根资源异常,我知道当我们作为提供程序包提供的包名称不包含任何带有 @Path 注释的类时,通常会出现此异常,但这里不是这种情况。您能否查看 web.xml 和 class 并建议我需要更改的内容。 我试图自己诚实地解决它(过去 2 天)

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>jersey-serlvet</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

    <init-param>  
        <param-name>jersey.config.server.provider.packages</param-name>  
        <param-value>restWebservice</param-value>  
    </init-param>  
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>jersey-serlvet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

Java 文件

package restWebservice;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Path("Movies")
class RestController{

    @GET
    @Path("/{movieName}")
    public Movie getMovieDetails(@PathParam("{movieName}") String nameOfMovie){
        Movie movie=null;
        if(nameOfMovie.contains("Ragnarok")){
                new Movie("Thor-Ragnarok","Released on 3 November 2017 in India");
        }else{
            new Movie("Thor","Released on 29 April 2011 in India");
        }
        return movie;
    }

    @POST
    public Response saveMovieDetails(@QueryParam("movieName") String nameOfMovie, @QueryParam("releaseDate") String dateOfRelease){
        String finalSave = nameOfMovie + " and it's release Information "+ dateOfRelease;

        return Response.status(200).entity(finalSave).build();
    }

}


class Movie{

private String movieName;
private String movieReleaseDate;

public Movie(String name,String date){
this.movieName = name;
this.movieReleaseDate = date;

}


public void displayMovieInfo(){
System.out.println( this.movieName+" and "+ this.movieReleaseDate);
}


}


.

项目树视图

├── java
│   └── restWebservice
│       └── RestController.java
├── pom.xml
├── src
│   └── main
│       ├── resources
│       └── webapp
│           ├── WEB-INF
│           │   └── web.xml
│           └── index.jsp
└── target
    ├── classes
    │   └── restWebservice
    │       ├── Movie.class
    │       └── RestController.class
    ├── m2e-wtp
    │   └── web-resources
    │       └── META-INF
    │           ├── MANIFEST.MF
    │           └── maven
    │               └── RESTJava
    │                   └── MovieService
    │                       ├── pom.properties
    │                       └── pom.xml
    └── test-classes

【问题讨论】:

    标签: java rest


    【解决方案1】:
    <param-name>jersey.config.server.provider.packages</param-name>
    

    此参数(告诉 Jersey 扫描哪个包)适用于 Jersey 2.x。 1.x版本是

    com.sun.jersey.config.property.packages
    

    另外:

    • 公开您的资源类,将模型移动到它自己的类文件中,然后公开。
    • 您的 Java 代码应该在 src/main/java 中,所以将 restWebservice 文件夹移到那里

    【讨论】:

    • 感谢帮助,但仍然没有解决问题,有没有地方可以给你看我的代码,你可以看看吗?
    • 放到GitHub上
    • 公开资源类并将模型移动到它自己的类文件中并公开。此外,您的 Java 代码应该在 src/main/java 中,因此将 restWebservice 文件夹移动到 trhere
    • 你是个天才 Paul :) 来自印度的荣誉。
    猜你喜欢
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    相关资源
    最近更新 更多