我想以这种方式调用我的api端点:
http://.../companies/1/employees
@Path("companies")
public class CompanyResource {
@Context
ResourceContext resourceContext;
@GET
@Path("{idCompany}/employees")
public EmployeeResource getEmployees() {
return resourceContext.getResource(EmployeeResource.class);
}
}
和
@Path("/employees")
public class EmployeeResource {
@PathParam("idCompany")
String idCompany;
@GET
public List
但路径参数为空.我究竟做错了什么?有没有更正确的方法来做到这一点?
最佳答案
我无法重现null id,但有几点需要指出
>应从EmployeeResource getEmployees()方法中删除@GET.子资源定位器不应具有HTTP方法注释.见Sub-resources
>还忽略了EmployeeResource上的@Path(不需要).不是问题,只是认为你应该知道.
下面是使用Jersey Test Framework的完整工作示例.以下是我使用的测试依赖项
您可以像任何其他JUnit测试一样运行它
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.container.ResourceContext;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
import org.junit.Test;
import static junit.framework.Assert.*;
public class LocatorTest extends JerseyTest {
public static class Employee {
public String firstName;
public String lastName;
public Employee(){}
public Employee(String firstName,String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
public static class Company {
public String companyId;
public List