Bai*_*man 19 java rest spring spring-mvc spring-data-rest
我想使用Spring Rest接口公开所有ID.我知道默认情况下这样的ID
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(unique=true, nullable=false)
private Long id;
Run Code Online (Sandbox Code Playgroud)
不会通过其余界面公开.
我知道我可以用它
@Configuration
public class RepositoryConfig extends RepositoryRestMvcConfiguration {
@Override
protected void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
config.exposeIdsFor(User.class);
}
}
Run Code Online (Sandbox Code Playgroud)
公开用户的ID.
但有没有一种简单的方法来公开我的所有ID而无需手动维护此configureRepository方法中的列表?
提前致谢!
Mar*_*ark 14
我发现,如果你命名@Id字段' Id'它将显示在JSON中,如果你有一个公共的getter Id.Id将显示为名为' id' 的JSON密钥
例如: @Id @Column(name="PERSON_ROLE_ID") private Long Id;
这也适用于@EmbeddedId称为' Id'的字段,只要它具有公共getter.在这种情况下,Id的字段将显示为JSON对象.
例如: @EmbeddedId private PrimaryKey Id;
令人惊讶的是,这是区分大小写的,调用id' id'不起作用,即使它是Java字段的更常规名称.
我应该说我完全意外地发现了这一点,所以我不知道这是否是一个公认的约定,或者是否适用于Spring Data和REST的早期版本或未来版本.所以我把我的maven pom的相关部分包括在内,只是因为它对版本有敏感性......
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.2</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
mek*_*azu 13
如果要公开所有实体类的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]));
}
}
Run Code Online (Sandbox Code Playgroud)
@mekasu的更新答案。2.4 中界面RepositoryRestConfigurer发生了一些变化。
2.4 之前:
import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer;
import javax.persistence.EntityManager;
import javax.persistence.metamodel.Type;
@Configuration
public class Config implements RepositoryRestConfigurer {
@Autowired
private EntityManager entityManager;
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
config.exposeIdsFor(entityManager.getMetamodel().getEntities().stream().map(Type::getJavaType).toArray(Class[]::new));
}
}
Run Code Online (Sandbox Code Playgroud)
2.4 后
import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import javax.persistence.EntityManager;
import javax.persistence.metamodel.Type;
@Configuration
public class Config implements RepositoryRestConfigurer {
@Autowired
private EntityManager entityManager;
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) {
config.exposeIdsFor(entityManager.getMetamodel().getEntities().stream().map(Type::getJavaType).toArray(Class[]::new));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17187 次 |
| 最近记录: |