java – 将@PathParam传递给Jersey中的Sub Resource locator类

前端之家收集整理的这篇文章主要介绍了java – 将@PathParam传递给Jersey中的Sub Resource locator类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我想以这种方式调用我的api端点:

http://.../companies/1/employees

并使用代码1检索公司的员工.我有以下代码

@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

猜你在找的Java相关文章