0

我正在按照教程的简单步骤进行操作,直到现在我无法弄清楚它为什么会显示错误。

我正在尝试使用简单的 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

1 回答 1

4

称呼

localhost:8084/restdemo/resources/employee/1

A@PathParam不是@QueryParam. 它的名字来源于它在查询路径中的位置,而不是像empno=1. 既然你@Path

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

您的 URL 路径中位于 位置的元素{empno}会自动分配给您的@PathParam empno.

编辑:

如果你想调用一个 URL,比如

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

你必须使用

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

请注意,?这是它左侧的 URL 路径和右侧的查询之间的边界。

暗示:

您的 JSON 无效。您必须使用双引号"而不是单引号'

return "{\"name\":\"George Koch\", \"age\":58}";
于 2012-10-22T09:57:17.763 回答