我想使用Spring Rest界面公开所有ID。
我知道默认情况下,这样的ID不会通过rest接口公开:
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(unique=true, nullable=false) private Long id;
我知道我可以使用它来公开ID User:
User
@Configuration public class RepositoryConfig extends RepositoryRestMvcConfiguration { @Override protected void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) { config.exposeIdsFor(User.class); } }
但是,有没有一种简便的方法可以在不手动维护此列表的情况下公开所有ID configureRepositoryRestConfiguration?
configureRepositoryRestConfiguration
当前,SDR无法提供此功能。SDR Jira跟踪器上的此问题说明了为什么无法(也许不应该)的原因。
从根本上讲,由于ID已包含在self响应的链接中,因此你无需将ID 公开为对象本身的属性。
self
也就是说,你也许可以使用反射来检索所有具有javax.persistence.Id注释的类,然后调用RepositoryRestConfiguration#exposeIdsFor(Class<?>... domainTypes)。
RepositoryRestConfiguration#exposeIdsFor(Class<?>... domainTypes)
如果要公开所有实体类的id字段,请执行以下操作:
import java.util.stream.Collectors; import javax.persistence.EntityManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.data.rest.core.config.RepositoryRestConfiguration; import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurerAdapter; @Configuration public class MyRepositoryRestConfigurerAdapter extends RepositoryRestConfigurerAdapter { @Autowired private EntityManager entityManager; @Override public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) { config.exposeIdsFor(entityManager.getMetamodel().getEntities().stream().map(e -> e.getJavaType()).collect(Collectors.toList()).toArray(new Class[0])); } }