7

Spring Data REST が JSON-PATCH コンテンツ本文を受け入れることができません。何が間違っていますか?

単純なドメイン:

@Document
public class DomainA {
    @Id private String id;
    private String atext;
    public String getAtext(){ return atext;}
    public void setAtext(String str){ atext = str;}
}

MondoDB レポジトリに支えられています:

@RepositoryRestResource
public interface DomainARepository extends MongoRepository<DomainA, String> {}

次のように、これを JSON-PATCH したい:

curl -X PATCH -H "Authorization: Basic dXNlcjpQVw=="
-H "Content-Type: application/json-patch+json"
-H "Cache-Control: no-cache"
-d '[{"op":"replace", "path":"/atext", "value":"JSON-PATCHed text"}]' 
http://localhost:8080/domainAs/550e169209a5cc0df82c95d4

しかし、そうすると例外が発生します。

org.springframework.http.converter.HttpMessageNotReadableException:
Could not read an object of type class patchex.DomainA from the request!;
nested exception is
org.springframework.http.converter.HttpMessageNotReadableException:
Could not read payload!; nested exception is java.lang.ClassCastException:
com.fasterxml.jackson.databind.node.ArrayNode cannot be cast to
com.fasterxml.jackson.databind.node.ObjectNode at
    org.springframework.data.rest.webmvc.config.PersistentEntityResourceHandlerMethodArgumentResolver.readPatch(PersistentEntityResourceHandlerMethodArgumentResolver.java:183)

....

配列ブラケットなしでパッチ本体を指定すると、204 が返されます。例外ではありませんが、ドキュメントへの変更もありません。PUTまたは;PATCHを使用してドキュメントに「パッチ」を適用できます。{"atext":"PUTed value"}POST/GET は正常に機能します。また、Spring Data REST のテストでは、コンテンツの本文を受け入れることができれば、JSON-PATCHが機能することを確認しているようです。では、ここで PATCH を使用する正しい方法は何ですか?

(-data-mongodb、-data-rest、Java 1.8 の Spring Boot 1.2.2.RELEASE スターターを使用)

編集: JPA (H2) CRUD @RepositoryRestResource リポジトリに戻った場合も同じ例外です。

編集: https://jira.spring.io/browse/DATAREST-498で JIRA を開きました

4

0 に答える 0