我正在用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不兼容

===============>>#1 票数:1

如果您使用的是Jersey,则可以使用其过滤工具。 以下是docs中相关章节的链接: 实体过滤

19.5节似乎符合您的要求。

注意:我以前没有使用过(过滤功能,我确实使用过Jersey)。 我发现它使用谷歌。 因此,我无法提供有关如何使其工作的示例。

编辑:一个例子: https//github.com/jersey/jersey/tree/master/examples/entity-filtering-selectable

  ask by Miksel translate from so

未解决问题?本站智能推荐: