我在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
在这里,我传递了电影的id
和我在JSON格式的响应中返回的字段。
有没有一种简单的方法可以做到这一点,或者现有的库可以做到这一点吗?
修改 是的A.J我最终找到了相同的例子,但我不能让它工作
在该示例中,他们有一个包含所有必要配置的文件
@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
兼容答案 0 :(得分:1)
如果您使用的是Jersey,您可能会使用它的过滤功能。 以下是文档中相关章节的链接:Entity Filtering
部分19.5看起来符合您的要求。
注意:之前我没有使用过此功能(过滤功能,我确实使用了Jersey)。 我发现它使用谷歌。所以我无法提供如何使其发挥作用的例子。
编辑:一个例子:https://github.com/jersey/jersey/tree/master/examples/entity-filtering-selectable