2014-07-17 2 views
1

Patch 요청 중에 배열 값을 업데이트 할 때 MongoRepository에게 $ addToSet을 구현하도록 지시 할 수 있습니까?

HATEOAS와 Mongodb에서 Spring 데이터 나머지를 사용하고 있으며, 현재 구현은 이전 배열을 새 배열로 대체합니다. 원하는 기능은 두 배열의 결합을 수행하고 해당 배열을 Mongodb 문서에 저장하는 것입니다.

맞춤 구현으로이를 수행 할 수 있어야하지만 Spring은 구현을위한 나머지 url을 생성하지 않으므로 다소 작은 요구 사항에 대해 많은 상용구가 필요합니다. 모든 응답이 감사합니다.

답변

2

스프링 데이터 REST는 도메인 개체와 저장소 추상화 위에 구축됩니다. 따라서 저장소 특정 구현과 함께 작동하게하는 것은 그 범위를 벗어납니다. 귀하의 핵심 목표는 귀하의 도메인 인스턴스에 패치 요청을 적용하는 것이라고 가정하고 그 $addToSet 그 수단입니다.

스프링 데이터 REST 버전 2.2 이후 PATCH 요청시 JSON Patch media type을 지원합니다. 그래서 당신은 서버에 다음과 같은 문서를 보낼 수 있습니다

c 가정
[{ "op": "add", "path": "https://stackoverflow.com/a/b/c", "value": [ "foo", "bar" ] }] 

당신은 조작하려고 배열이 그것에 foobar을 추가합니다.

다른 더 급진적 인 옵션은 수동으로 구현 된 컨트롤러를 실제로 배치하고 URI 공간의 올바른 위치에 연결하여 수동으로 저장소와 상호 작용하는 것입니다.

+0

@ Olivier-gierke 답장을 보내 주셔서 감사합니다. 나는 Maven에서 2.2 M1을 사용할 수 없다. 최신 버전은 2.1.1.RELEASE이고이 버전에서는 서버가 유사한 문서를 보내면 405가 표시됩니다. Infact 귀하의 회신 전에 유사한 문서가 서버로 전송되는 솔루션을 구현하려고하고 그것을 처리하기 위해 요격기에서 preHandle을 사용합니다. 2.2 M1이 출시 될 때까지 가능한 솔루션이라고 생각하십니까? 감사! – user3848737

+0

마일스톤은 [Spring IO 저장소] (http://repo.spring.io/libs-milestone)에서 얻을 수 있습니다. –

+0

@ Olivier-gierke 알았어요, 고마워! curl :'curl-i -X ​​PATCH -H "Content-Type : application/json"-d '{ "op": "add", "path": "/ reminder/53c84d00b02ec66a1e328ccf/sendeeids", "value": [ "dontreplace"]} 'http : // localhost : 8080 /'실행 가능한 동사 만 GET, HEAD 및 OPTIONS 인 것 같습니다. 내가 여기서 뭔가 잘못하고있는거야? – user3848737