我正在遵循教程的简单步骤,直到现在我无法弄清楚它显示错误的原因。
我正在尝试使用简单的JAX-RS应用程序返回简单的JSON。
以下是我的代码和web.xml
设置:
package ws;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.PathParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
@Path("/employee/{empno}")
public class EmployeeResource {
@Context
private UriInfo context;
public EmployeeResource() {
}
@GET
@Produces("application/json")
public String getJson( @PathParam("empno") int empno) {
switch(empno) {
case 1 :
return "{'name':'George Koch', 'age':58}";
case 2:
return "{'name':'Peter Norton', 'age':50}";
default:
return "{'name':'unknown', 'age':-1}";
}
}
@PUT
@Consumes("application/json")
public void putJson(String content) {
}
}
web.xml
如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>ws</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
</web-app>
然后我使用地址:
localhost:8084/restdemo/resources/employee/empno=1
但它显示404错误。
答案 0 :(得分:4)
呼叫
localhost:8084/restdemo/resources/employee/1
@PathParam
不是@QueryParam
。它的名称来源于它在查询路径中的位置,而不是像empno=1
这样的名称。由于您的@Path
是
@Path("/employee/{empno}")
位于{empno}
位置的网址路径元素会自动分配到您的@PathParam
empno
。
修改强>
如果您想调用类似
的网址localhost:8084/restdemo/resources/employee?empno=1
你必须使用
@Path("/employee")
public String getJson(@QueryParam("empno") int empno)
请注意?
,它是其左侧的网址路径与其右侧的查询之间的边界。
<强>提示:强>
您的JSON无效。您必须使用双引号"
而不是单引号'
:
return "{\"name\":\"George Koch\", \"age\":58}";