![](/img/trans.png)
[英]Compiling embbeded Grizzly Jersey application can't find Jersey Resources
[英]Jersey doesn't find Resources : 404 error
我正在使用Jersey 2.10在Tomcat 8上运行一个简单的RESTful Api。
这是我的应用程序类:
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仅包含<display-name>
标记:
<?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>
我成功运行了项目,但遇到两个问题:
已检测到以下警告:警告:HTTP GET方法(公共JsonObject com.manager.api.resources.UserResources.get(java.lang.String))不应消耗任何实体。 :自从我放入@Produces (MediaType.APPLICATION_JSON)
以来,并没有为该方法放入@Consumes
,这使我感到奇怪。
最后,最大的问题是当我键入以下内容时出现404错误 : http://localhost:8080/manager-api/api/users/test
当它应该将Test
打印为文本时。
您是否知道这2个错误背后的原因是什么? 谢谢。
确保您的pom.xml具有Servlet 3.0,而不是2.0。 也可以尝试在@ApplicationPath批注(例如“ / api”)中提供绝对路径,而不是相对路径。 也可能您的包声明对于resourceconfig不正确吗?
如果您有更多麻烦,请参考此文章: 如何仅使用注释(不使用web.xml)设置JAX-RS Application?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.