11

我正在使用 Spring Data REST,我正在尝试使用 Spring REST 更改多对一关系,但我无法获得正确的 http 调用。

我的实体看起来像这样(使用 POST 等创建的基本调用可以正常工作):

{
  “身份证”:70,
  “productId”:年年,
  “产品折扣”:10,
  “版本”:0,
  “描述”:“xxx”,
  “_链接”:{
    “自己” : {
      “href”:“http://localhost:8080/rest/rules/70”
    },
    “时间定义”:{
      “href”:“http://localhost:8080/rest/rules/70/timedefinition”
    }
  }
}

我想将 ID 1 的当前时间定义更改为 ID 2。

我尝试了很多不同的调用类型,但有不同的错误。下面的调用不起作用。

curl -X PUT -H "Content-Type: text/uri-list" -d 'http://localhost:8080/rest/timedefinition/1' http://localhost:8080/rest/rules/70/timedefinition

收到以下错误:

无法从类型 java.lang.String 转换为类型 domain.TimeDefinition for value '0';嵌套异常是 java.lang.IllegalArgumentException:为类 domain.TimeDefinition 提供了错误类型的 id。预期:类 java.lang.Integer,得到类 java.lang.Long

另一个例子是这样的:

curl -X PUT -H "Content-Type: application/json" -d '{"timedefinition": {"href" : "http://localhost:8080/rest/timedefinition/0", "rel" : "timedefinition "} }' http://localhost:8080/rest/rules/70/timedefinition

我得到的错误是:

"message":"必须只发送 1 个链接来更新不是 List 或 Map 的属性引用。"

不幸的是, http: //docs.spring.io/spring-data/rest/docs/2.0.1.RELEASE/reference/html/ 上的主要参考资料没有提供关于上述主题的太多信息。

非常感谢有关更新实体关联的正确 REST 查询格式的任何见解和解释!

4

3 回答 3

14

正确答案是我的评论:

curl -v -X PUT -H "Content-Type: text/uri-list" -d "http://localhost:8080/rest/timedefinition/0" http://localhost:8080/rest/rules/70/timedefinition
于 2014-04-11T09:41:42.470 回答
3

spring-data-rest-webmvc:3.2.0-RELEASE每次发送 PUT 以创建一对一关联时,都会引发此错误。

更改 spring-boot-starter-parent from2.2.0.RELEASE2.2.1.RELEASE我解决了这个问题。您也可以手动覆盖spring-data-rest-webmvc3.2.1.RELEASE.

相关提交:https ://github.com/spring-projects/spring-data-rest/commit/202a8aa30221b81dece183b74d81278deaf45321

于 2019-11-09T18:20:42.910 回答
1

您还可以通过将关系嵌入_links节点来使用 application/json 内容类型。

curl -X PUT -H "Content-Type: application/json" -d '{"_links":{"timedefinition": {"href" : "http://localhost:8080/rest/timedefinition/0", "rel" : "timedefinition"} }}' http://localhost:8080/rest/rules/70/timedefinition
于 2015-05-21T14:49:00.977 回答