簡體   English   中英

Java-指定要在REST中返回的字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM