Spring Data REST에서 JSON 응답으로 ID를 반환합니다.
나는 실체가 있습니다.
@Entity
@Table(name = "books")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@Column(name = "id", unique = true, nullable = false)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
이렇게 초기화합니다.
@PostConstruct
public void init() {
List<String> newFiles = this.listFiles();
newFiles.forEach(filename -> {
Book book = new Book();
book.setName(filename);
dbRepository.save(book);
});
}
의 결과를 설정하면save
의 예로Book
나는 그것을 얻을 수 있습니다.id
그리고 그것은 아닙니다.null
—그래서id
정상적으로 생성됩니다.
리포지토리를 정의했습니다.
@RepositoryRestResource
public interface IBooksRepository extends CrudRepository<Book, Long> {
}
데이터를 가져오고 데이터를 설정하는 데 사용하고 싶습니다.books
데이터베이스에 있는 테이블.
액세스를 시도할 때repository rest
사용.curl localhost:8080/books
다음과 같은 답변을 받습니다.
{
"_embedded":{
"books":[
{
"name":"simple-file.txt",
"_links":{
"self":{
"href":"http://localhost:8080/books/1"
},
"book":{
"href":"http://localhost:8080/books/1"
}
}
}
]
},
"_links":{
"self":{
"href":"http://localhost:8080/books"
},
"profile":{
"href":"http://localhost:8080/profile/books"
}
}
}
그books
요소 리턴name
오직. 어떻게 돌려줄 수 있습니까?id
마찬가지로, 와 같은 수준에서.name
?
Spring Data Rest는 기본적으로 ID를 숨깁니다. JSON에 ID를 저장하려면 엔티티에 대한 ID를 수동으로 구성해야 합니다.스프링 버전에 따라 자체 구성(이전)을 제공할 수 있습니다.
@Configuration
public class ExposeEntityIdRestConfiguration extends RepositoryRestMvcConfiguration {
@Override
protected void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
config.exposeIdsFor(Book.class);
}
}
...또는 등록RepositoryRestConfigurer
(현재):
@Component
public class ExposeEntityIdRestMvcConfiguration extends RepositoryRestConfigurerAdapter {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
config.exposeIdsFor(Book.class);
}
}
자세한 내용은 Spring Data Rest 설명서를 참조하십시오.
승인된 응답이 더 이상 사용되지 않는 메서드를 재정의합니다.다음은 업데이트된 버전입니다.
@Component
public class RestConfig implements RepositoryRestConfigurer {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) {
config.exposeIdsFor(Book.class);
}
}
대안적인 접근 방식은 다음을 구현하는 것은RepositoryRestConfigurer
당신의@SpringBootApplication
주석이 달린 클래스:
@SpringBootApplication
public class MyApplication implements RepositoryRestConfigurer {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) {
config.exposeIdsFor(Book.class);
}
}
이제 정적 메서드가 있습니다.RepositoryRestConfigurer.withConfig
그것은 위와 같은 일을 합니다.javadoc 참조:
{@linkRespositoryRestConfiguration}만 수정하려는 단순한 {@linkRestConfigurer} 인스턴스를 쉽게 생성할 수 있는 편리한 방법입니다.
그들의 통합 테스트 중 하나에서 사용법을 발견했습니다.
따라서 현재로서는 다음과 같은 접근 방식이 보다 최신입니다.
@Bean
public RepositoryRestConfigurer repositoryRestConfigurer()
{
return RepositoryRestConfigurer.withConfig(config -> {
config.exposeIdsFor(Book.class);
});
}
@Component
public class RestConfig implements RepositoryRestConfigurer {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
config.exposeIdsFor(Book.class);
//config.exposeIdsFor(Library.class);
}
}
이것은 모든 엔티티에 적용되는 솔루션입니다.
@Autowired
private EntityManager entityManager;
@Bean
public RepositoryRestConfigurer repositoryRestConfigurer() {
return RepositoryRestConfigurer.withConfig(config -> config.exposeIdsFor(entityManager.getMetamodel().getEntities().stream().map(Type::getJavaType).toArray(Class[]::new)));
}
이것은 좋은 방법입니다.
@Projection(name = "customBook", types = { Book.class })
public interface CustomBook {
@Value("#{target.id}")
long getId();
}
크레딧: https://www.baeldung.com/spring-data-rest-projections-excerpts
언급URL : https://stackoverflow.com/questions/44046659/return-ids-in-json-response-from-spring-data-rest
'programing' 카테고리의 다른 글
Android의 일부 장치에서 카메라 의도를 사용하여 캡처한 이미지가 회전하는 이유는 무엇입니까? (0) | 2023.07.03 |
---|---|
VBA : BOM 없이 UTF-8로 파일 저장 (0) | 2023.07.03 |
인덱스가 사용 중인지 확인하는 방법 (0) | 2023.07.03 |
Maria docker passWordCharacterEncoding 문제 (0) | 2023.07.03 |
VBA에 주석 블록 구문이 포함되어 있습니까? (0) | 2023.07.03 |