2012-10-22 104 views
0

我按照教程的簡單步驟,直到現在我無法弄清楚爲什麼它顯示錯誤。如何使用@PathParam?

我想使用簡單的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錯誤。

回答

4

呼叫

localhost:8084/restdemo/resources/employee/1 

一個@PathParam不是@QueryParam。它的名字來源於查詢路徑中的位置,而不是像empno=1這樣的名稱。由於您的@Path

@Path("/employee/{empno}") 

是在{empno}位置的URL路徑的元素被自動分配給你的@PathParamempno

編輯:

如果你想調用像

localhost:8084/restdemo/resources/employee?empno=1 

一個網址,你必須使用

@Path("/employee") 
public String getJson(@QueryParam("empno") int empno) 

注意?是離開的URL路徑之間的邊界它和它的權利查詢。

提示:

您的JSON是無效的。您必須使用雙引號",而不是單引號'

return "{\"name\":\"George Koch\", \"age\":58}"; 
+0

如何使用查詢參數? – Harshit

+0

@ user595169看我的編輯。 – 2012-10-22 10:51:39

+0

謝謝,這真的很有幫助 – Harshit