【发布时间】:2014-06-30 13:13:00
【问题描述】:
我正在使用 Jersey 2.10 并在 Tomcat 8 上运行一个简单的 RESTful Api。
这是我的 Application 类:
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>
我成功运行了我的项目,但我遇到了 2 个问题:
已检测到以下警告:警告:HTTP GET 方法 public JsonObject com.manager.api.resources.UserResources.get(java.lang.String) 不应使用任何实体。 :我觉得这很奇怪,因为我输入了@Produces (MediaType.APPLICATION_JSON) 并且没有为这个方法输入@Consumes。
最后,最大的问题是当我输入 http://localhost:8080/manager-api/api/users/test 时遇到的 404 错误,它应该将 Test 打印为文本。
您知道这两个错误背后的原因是什么吗?谢谢。
【问题讨论】:
-
您的 web.xml 中有
<servlet-mapping>或<filter-mapping>标记吗? -
@Xinzz:谢谢你的回答。不,我没有。官方文档中说:对于简单的部署,根本不需要 web.xml。相反,
@ApplicationPath注释可用于注释自定义 Application 子类并为应用程序中配置的所有 JAX-RS 资源定义基本应用程序 URI。 jersey.java.net/documentation/latest/deployment.html -
我知道这是旧的,但您的路径应该采用@Path("/test") 或@Path(value="/test") 格式,而不是@Path("value=/测试”)。
标签: java rest tomcat jersey jersey-2.0