我正在尝试使用泽西做下面的事情:
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ResourceBundle;
public class route {
private final Logger logger = LogManager.getLogger(route.class);
private ResourceBundle errMsgs = ResourceBundle.getBundle(Master.ROUTE.getBundleName());
@GET @Path("route/{v_route}")
@Produces(MediaType.TEXT_PLAIN)
public Response response(@PathParam("v_route") String vp_route) {
String[] strings = {vp_route};
if (Misc.isEmptyNull(strings)) {
logger.error(errMsgs.getString("missingRouteID"));
throw new WebException(errMsgs.getString("missingRouteID"));
}
return Response.ok("ok",MediaType.TEXT_PLAIN).build();
}
@POST @Path("route")
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response postResponse(@FormParam("v_auditid") String p_auditid,
@FormParam("v_tenant") String p_tenant){
// removed to keep short
}
然而,即使是简单的cURL到达基本http://site/WebApi/route/parameter也会产生以下结果:
"" - 错误 报告
HTTP 状态404 - 未找到
类型状态 报告
消息未找到
描述 请求的资源不可用。
""
在您急于回答这个问题之前需要注意的两件重要事项:
答案 0 :(得分:2)
请参阅此处https://jersey.java.net/documentation/latest/deployment.html的jersey文档的第4.2,4.10和4.7.1.1节,您需要创建一个应用程序扩展类并将扫描程序添加到web.xml配置中以便使用带注释的类3 p>
请参阅我的博客示例
http://blog.vbranden.com/2015/03/creating-jersey-webservice-in-gatein.html
球衣有几种方法可以使用带注释的课程。此处的示例使用resourceconfig而不是application。还有一种方法可以在web.xml中完全执行此操作,但应用程序和资源配置可以提供更大的灵活性
使用应用程序扩展类
的示例<强>的web.xml 强>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>route</display-name>
<servlet>
<servlet-name>route</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.yourcompany.app.package.WSApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>route</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
应用程序扩展类 WSApplication.java
package com.yourcompany.app.package;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.core.Application;
import com.yourcompany.annotated.package.*;
public class WSApplication extends Application {
public Set<Class<?>> getClasses() {
Set<Class<?>> s = new HashSet<Class<?>>();
s.add(route.class);
return s;
}
}
当然,包名称应该改为有意义的名称。并且任何其他路径注释类只是作为新项添加到HashSet中。