Java 泽西不';找不到资源:404错误

Java 泽西不';找不到资源:404错误,java,rest,tomcat,jersey,jersey-2.0,Java,Rest,Tomcat,Jersey,Jersey 2.0,我正在使用Jersey 2.10开发一个简单的RESTful Api,并在Tomcat 8上运行 这是我的应用程序课程: package com.manager.api.application; import javax.ws.rs.ApplicationPath; import org.glassfish.jersey.server.ResourceConfig; @ApplicationPath ("api") public class Application extends Resou

我正在使用Jersey 2.10开发一个简单的RESTful Api,并在Tomcat 8上运行

这是我的应用程序课程:

package com.manager.api.application;

import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.server.ResourceConfig;

@ApplicationPath ("api")
public class Application extends ResourceConfig {

    public Application () {
        packages ("com.manager.api.resources");
    }   
}
我的资源包包含:

接口:Resources.java

package com.manager.api.resources;

import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

public interface Resources {

    @GET
    @Produces (MediaType.APPLICATION_JSON)
    public JsonObject getList ();

    @GET
    @Path ("value=/{id}")
    @Produces (MediaType.APPLICATION_JSON)
    public JsonObject get (String id);

    @POST
    @Path ("value=/{data}")
    @Consumes (MediaType.APPLICATION_JSON)
    public void post (JsonObject data);

    @PUT
    @Path ("value=/{data}")
    @Consumes (MediaType.APPLICATION_JSON)
    public void put (JsonObject data);

    @DELETE
    @Path ("value=/{id}")
    public void delete (String id);
}
一个抽象类:ResourcesImpl.java,它实现了Resources接口

package com.manager.api.resources;

public abstract class ResourcesImpl implements Resources {  
}
最后是一个扩展ResourcesImpl.java的资源类:UserResources.java

package com.manager.api.resources;

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

import com.manager.api.dao.UserDao;

@Path ("value=/users")
public class UserResources extends ResourcesImpl {

    private UserDao user = new UserDao ();

    @GET
    @Path ("value=/test")
    @Produces (MediaType.TEXT_PLAIN)
    public String Test () {
        return "Test";
    }

    @Override
    public JsonObject getList () {
        return user.getList ();
    }

    @Override
    public JsonObject get (String id) {
        return user.get (id);
    }

    @Override
    public void post (JsonObject data) {
        user.post (data);
    }

    @Override
    public void put (JsonObject data) {
        user.put (data);
    }

    @Override
    public void delete(String id) {
        user.delete (id);
    }
}
而我的web.xml只包含一个
标记:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee  http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
        id="WebApp_ID" version="3.1">

    <display-name>manager-api</display-name>
</web-app>

管理器api
我成功运行了我的项目,但遇到了两个问题:

检测到以下警告:警告:HTTP GET方法public JsonObject com.manager.api.resources.UserResources.GET(java.lang.String)不应使用任何实体。:自从我将
@products(MediaType.APPLICATION\u JSON)放入
并且没有为此方法放置
@Consumes

最后一个大问题是,当我键入:
http://localhost:8080/manager-api/api/users/test
何时应将
test
打印为文本


你知道这两个错误背后的原因吗?谢谢。

确保您的pom.xml具有servlet 3.0而不是2.0。还可以尝试在@ApplicationPath注释(例如“/api”)中提供绝对路径,而不是相对路径。也可能您的包声明对于resourceconfig不正确

如果您有更多问题,请参阅此:

您的web.xml中是否有
标记?@Xinzz:谢谢您的回答。不,我没有。官方文档中说:对于简单的部署,根本不需要web.xml。相反,可以使用
@ApplicationPath
注释来注释自定义应用程序子类,并为应用程序中配置的所有JAX-RS资源定义基本应用程序URI。我知道这很旧,但您的路径应该是@Path(“/test”)或@Path(value=“/test”)格式,而不是@Path(“value=/test”)。谢谢您的回答。实际上我没有用Maven。这是强制性的吗?这不是必须的,但我强烈推荐。查看教程。我将生成一个样本Jersey项目的maven原型,并从那里开始:)