[英]Java - Specify fields to return in REST
我正在用Java實現基於REST的服務,但是我不想為每個GET調用返回JSON中的完整實體。
我現在所擁有的是
@GET
@Path("movie/{id}")
@Produces({"application/json"})
public Movie find(@PathParam("id") Integer id) {
return getEntityManager().find(Movie.class, id);
}
通過上面的代碼,我可以獲取id指定的電影的完整JSON表示,但是我想這樣做:
GET>http://mydomain.com/movie/id=1?fields=title,year
在這里,我以JSON格式的響應傳遞了電影的id
和想要返回的字段。
有沒有簡單的方法可以做到這一點,或者現有的圖書館可以做到這一點?
編輯:是的AJ我最終找到了相同的示例,但我無法使其正常工作
在該示例中,他們有一個包含所有必要配置的文件
@ApplicationPath("/")
public class SelectableEntityFilteringApplication extends ResourceConfig {
public SelectableEntityFilteringApplication() {
// Register all resources present under the package.
packages("org.glassfish.jersey.examples.entityfiltering.selectable");
// Register entity-filtering selectable feature.
register(SelectableEntityFilteringFeature.class);
// Configure MOXy Json provider.
register(new MoxyJsonConfig().setFormattedOutput(true).resolver());
property(SelectableEntityFilteringFeature.QUERY_PARAM_NAME, "select");
}
}
但由於即時通訊使用的是J2EE,因此我的IDE生成的文件是
@javax.ws.rs.ApplicationPath("webresources")
public class ApplicationConfig extends Application {
@Override
public Set<Class<?>> getClasses() {
//register(SelectableEntityFilteringFeature.class);
Set<Class<?>> resources = new java.util.HashSet<>();
addRestResourceClasses(resources);
return resources;
}
我不能注冊該類,我真的必須擴展ResourceConfig嗎? 似乎與javax.ws.rs.core.Application不兼容
如果您使用的是Jersey,則可以使用其過濾工具。 以下是docs中相關章節的鏈接: 實體過濾
第19.5節似乎符合您的要求。
注意:我以前沒有使用過(過濾功能,我確實使用過Jersey)。 我發現它使用谷歌。 因此,我無法提供有關如何使其工作的示例。
編輯:一個例子: https : //github.com/jersey/jersey/tree/master/examples/entity-filtering-selectable
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.