[SPRING] Spring 데이터 나머지에 목록을 게시하는 방법?
SPRINGSpring 데이터 나머지에 목록을 게시하는 방법?
이 예제를 따라 가면 고유 한 Person 객체를 게시 할 수 있습니다. 한 번에 Person 컬렉션을 게시 할 수있는 REST 서비스가 필요합니다. 한 번의 호출로 수많은 Person 개체가있는 Team이라는 컬렉션 / 목록.
내 질문에, 당신이 REST 요청에 각 사람을 보내는 OneToMany 관계에 대한 정확한 질문이 아닙니다. 이 주제는 잘 대답합니다.
@RepositoryRestResource 나 Spring Data Rest의 다른 기능을 이용하여 Person 객체 컬렉션을 보내고 싶습니다. Spring Data Rest에서 가능합니까? 또는 컨트롤러를 생성하고 목록을 수신하고 각 Person을 삽입하기 위해 팀 목록을 구문 분석하여 해결해야합니까?
이 기능 요청을 발견했습니다. 요즘 봄 휴식 데이터에 내가 찾고있는 것이 누락되어 있다고 대답하는 것 같지만 확실하지 않습니다.
내 비즈니스 요구 사항에서 응용 프로그램 A는 응용 프로그램 B에 주문 목록을 게시하고 향후 처리를 위해 데이터베이스에 저장해야하므로 Spring 데이터 나머지에 대한 내용을 읽고 샘플을 만든 후 깨끗한 아키텍처가 훌륭하고 매우 적합하다는 것을 알았습니다 내가 목록을 게시하는 방법을 찾지 못했다는 사실을 제외하고는 나의 요구 사항에 대해.
해결법
-
==============================
1.글쎄, AFAIK 당신은 봄 데이터 휴식과 그것을 할 수 없어, 그냥 문서를 읽고 당신이 볼 수있는 컬렉션 리소스에 목록을 게시에 대한 언급이 없습니다.
글쎄, AFAIK 당신은 봄 데이터 휴식과 그것을 할 수 없어, 그냥 문서를 읽고 당신이 볼 수있는 컬렉션 리소스에 목록을 게시에 대한 언급이 없습니다.
그 이유는 내게 불분명하지만, REST 자체는 일괄 작업을 수행하는 방법을 구체적으로 지정하지 않습니다. 따라서 컬렉션 리소스에 대한 목록을 게시해야하는 것처럼이 기능에 어떻게 접근해야하는지 명확하지 않습니다. 또는 / someentity / batch와 같은 리소스를 내보내 패치, 제거 및 엔티티를 한 번에 추가 할 수 있습니까? 어떻게 목록을 추가 할 것인가? 콜렉션에 대한 단일 POST의 경우 location 헤더의 spring-data-rest 리턴 ID. 배치 추가의 경우이 작업을 수행 할 수 없습니다.
그렇다고해서 스프링 데이터가 나머지 일괄 처리 작업이 누락 된 것을 정당화하지는 못합니다. 그들은이 IMHO를 구현해야하지만, 적어도 그것이 누락 된 이유를 이해하는 데 도움이 될 수 있습니다.
내가 말할 수있는 것은 비록 당신이 / someentity / batch를 제대로 처리 할 수있는 프로젝트에 자신 만의 Controller를 추가 할 수 있으며, 다른 프로젝트에서 사용할 수 있도록 라이브러리를 만들 수도 있습니다. 또는 spring-data-rest를 fork하고이 기능을 추가하십시오. 나는 그것이 어떻게 작동하고 지금까지 실패했는지 이해하려고 노력했지만. 하지만 아마 그걸 모두 알지?
이에 대한 기능 요청이 있습니다.
-
==============================
2.user1685095 대답을 기반으로 사용자 정의 Controller PersonRestController를 만들 수 있으며 Person의 포스트 콜렉션을 노출 할 수 있습니다. 아직 봄 날 휴식으로 노출되지 않은 것 같습니다.
user1685095 대답을 기반으로 사용자 정의 Controller PersonRestController를 만들 수 있으며 Person의 포스트 콜렉션을 노출 할 수 있습니다. 아직 봄 날 휴식으로 노출되지 않은 것 같습니다.
@RepositoryRestController @RequestMapping(value = "/persons") public class PersonRestController { private final PersonRepository repo; @Autowired public AppointmentRestController(PersonRepository repo) { this.repo = repo; } @RequestMapping(method = RequestMethod.POST, value = "/batch", consumes = "application/json", produces = "application/json") public @ResponseBody ResponseEntity<?> savePersonList(@RequestBody Resource<PersonWrapper<Person>> personWrapper, PersistentEntityResourceAssembler assembler) { Resources<Person> resources = new Resources<Person>(repo.save(personWrapper.getContent())); //TODO add extra links `assembler` return ResponseEntity.ok(resources); }
}
최신 정보
public class PersonWrapper{ private List<Person> content; public List<Person> getContent(){ return content; } public void setContent(List<Person> content){ this.content = content; } } public class Person{ private String name; private String email; // Other fields // GETTER & SETTER }
-
==============================
3.@RequestBody List
>를 사용하려고했습니다. 요청 본문에 링크가 없으면 제대로 작동하지만 요소가 링크를 전달하면 서버는 요청 본문을 비 직렬화 할 수 없습니다. @RequestBody List
>를 사용하려고했습니다. 요청 본문에 링크가 없으면 제대로 작동하지만 요소가 링크를 전달하면 서버는 요청 본문을 비 직렬화 할 수 없습니다. 그런 다음 @RequestBody Resources
를 사용하려고 시도했지만 목록의 기본 이름을 파악할 수 없었습니다. 마지막으로, List
>가 포함 된 래퍼를 시도해 보았습니다. 여기 내 해결책은 다음과 같습니다.
먼저 List
>에 대한 래퍼 클래스를 만듭니다. public class Bulk<T> { private List<Resource<T>> bulk; // getter and setter }
그런 다음 @RequestBody Resource
>를 매개 변수로 사용하십시오. 마지막으로, 한 요청에서 대량 데이터를 만들기위한 링크가있는 json 예제 :
{ "bulk": [ { "title": "Spring in Action", "author": "http://localhost:8080/authors/1" }, { "title": "Spring Quick Start", "author": "http://localhost:8080/authors/2" } ] }
-
==============================
4.
@RequestMapping(method=RequestMethod.POST, value="/batchInsert", consumes = "application/json", produces = "application/json") @ResponseBody public ResponseEntity<?> batchInsert(@RequestBody Resources<Person> people, PersistentEntityResourceAssembler assembler) throws Exception { Iterable<Person> s = repo.save( people.getContent() ); // save entities List<PersistentEntityResource> list = new ArrayList<PersistentEntityResource>(); Iterator<Sample> itr = s.iterator(); while(itr.hasNext()) { list.add( assembler.toFullResource( itr.next() ) ); } return ResponseEntity.ok( new Resources<PersistentEntityResource>(list) ); }
from https://stackoverflow.com/questions/31374689/how-to-post-a-list-to-spring-data-rest by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 3 MVC와 아파치 타일 2 통합 오류 (0) | 2019.04.04 |
---|---|
[SPRING] Spring에서 MappingJacksonJsonView가 사용하는 JSON 필드 이름 바꾸기 (0) | 2019.04.04 |
[SPRING] @Query 정의와 스펙을 하나의 Spring Data JPA 저장소 메소드에 결합 할 수 있습니까? (0) | 2019.04.04 |
[SPRING] Spring Java Configuration - enum에서 bean으로의 참조를 만드는 방법 - 참조 (0) | 2019.04.04 |
[SPRING] 스프링 부트 2.0 애플리케이션이 schema.sql을 실행하지 않는 이유는 무엇입니까? (0) | 2019.04.03 |