如何在嵌入式对象上进行jsonpatch?

tkclm6bt  于 2021-07-24  发布在  Java
关注(0)|答案(0)|浏览(199)

我需要使用jsonpatch方法修补一个对象,但是它不能接受json中的对象,所以我应该传递一个字符串名称,然后通过从存储库获取该名称,对主数据应用更新。请看一下主要数据:

{
    "_id": {
        "$oid": "6017453294aa2208ca4f723c"
    },
    "title": "News 1",
    "tag": {
        "$ref": "tag",
        "$id": {
            "$oid": "5f0e178f57143f5447e966f7"
        }
    }
}

在上面的示例中,我需要使用jsonpatch更新标记,代码如下:

[
    { "op": "replace", "path": "/tag", "value": "xxxxxxxxxxxxxxxxxxxxx" }
]

但这个请求的结果是:
00 internal\u server\u error“无法构造的示例” com.test.domain.Tag (尽管至少存在一个创建者):在[source:unknown;行:-1,列:-1](通过引用链:com.test.domain.news[“tag”])“;嵌套异常为com.fasterxml.jackson.databind.exc.missmatchdinputException:无法构造的示例 com.test.domain.Tag (尽管至少存在一个创建者):在[source:unknown;行:-1,列:-1](通过引用链:com.test.domain.news[“tag”])
您可以在下面看到所需部分的代码:
news.java(域):

public class News implements Serializable {
    @Id
    private String id;

    private String title;

    @DBRef
    private Tag tag;
}

newservice.java(要在何处应用json修补程序):

News news = newsRepository.findOne(predicate).orElseThrow(() -> new NewsNotFoundException(id));

var patchedNews = jsonPatch.apply(objectMapper.convertValue(news, JsonNode.class));
news = objectMapper.treeToValue(patchedNews, News.class);
news = newsRepository.save(news);
return newsMapper.toDto(news);

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题