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我可以使用or PATCHof来“修补”文档{"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