我想编写一个多层次的REST API,如:
/country
/country/state/
/country/state/{Virginia}
/country/state/Virginia/city
/country/state/Virginia/city/Richmond
我有一个java类,它是具有@Path(“country”)
的Country资源如何创建StateResource.java和CityResource.java,以便我的Countryresource可以按照我计划使用的方式使用StateResource?关于如何在Java中构造此类事物的任何有用链接?
答案 0 :(得分:19)
CountryResource
类需要使用@Path
注释到子资源CityResource
的方法。默认情况下,您负责创建CityResource
例如
@Path("country/state/{stateName}")
class CountryResouce {
@PathParam("stateName")
private String stateName;
@Path("city/{cityName}")
public CityResource city(@PathParam("cityName") String cityName) {
State state = getStateByName(stateName);
City city = state.getCityByName(cityName);
return new CityResource(city);
}
}
class CityResource {
private City city;
public CityResource(City city) {
this.city = city;
}
@GET
public Response get() {
// Replace with whatever you would normally do to represent this resource
// using the City object as needed
return Response.ok().build();
}
}
CityResource
提供了处理HTTP谓词的方法(在这种情况下为GET
)。
您应该查看有关子资源定位符的Jersey documentation以获取更多信息。
另请注意,Jersey提供ResourceContext来获取 it 来实例化子资源。如果您要在子资源中使用@PathParam
或@QueryParam
,我认为您需要使用此资源,因为运行时不会通过new
自行创建子资源。