0

我在 grails 中使用宁静的服务。我有 2 节课Person

import grails.rest.Resource
@Resource(formats=['json', 'xml'])

class Person {
   String name 
   Address address 

    static constraints = {
             }
           }

并且Address作为

  import grails.rest.Resource
  @Resource(formats=['json', 'xml'])
  class Address {

    String house
    static constraints = {
    }
  } 

在引导程序中,我可以创建新的人员条目,如下所示

new Person(name:"John" , address: new Address(house:"John Villa").save()).save();

但问题是我想使用带有 JSON 数据的 POST 请求来做同样的事情。我将 UrlMappings.Groovy 设置为

"/app/person"(resources: "person",  includes: ['index', 'show', 'save', 'update', 'delete', 'create', 'patch'])

"/app/address"(resources: "address",  includes: ['index', 'show', 'save', 'update', 'delete', 'create', 'patch'])

然后我尝试通过使用 JSON 数据向“/app/person”发送 POST 请求来使用 POSTMAN 休息客户端

{
   "name":"john" ,
   "address": "{'house' :'sample address' }"
}

但它给出了错误 422 无法处理的实体。

如何使用 JSON 做同样的事情?我想使用 POST 和 PUT 方法进行插入和更新。

4

2 回答 2

0

问题在于您发送的 JSON。虽然它是有效的 JSON,但它不是您资源的正确表示。你的 JSON 应该是:

{
   "name":"john",
   "address": 
   {
      "house":"sample address"
   }
}

从上面可以看出,该address属性实际上是一个嵌套对象,而不是String您发送的对象。

于 2015-06-27T16:00:38.507 回答
0

此外,您是否查看了http://grails.github.io/grails-doc/latest/guide/webServices.html上的指南?特别是我希望你检查部分:

grails.mime.types = [
    …
    json:          ['application/json', 'text/json'],
    …
    xml:           ['text/xml', 'application/xml']
]

请记住,当您使用 PersonInstance 处理“ /app/person ”时,实际上是使用PersonInstance执行“ /app/person/index/ ” (因此,如果需要,调试它的源代码)。

还要仔细检查班级中的“ id ”列。

于 2015-06-28T10:46:51.947 回答