如何将对象作为JSON传递给grails中的POST或PUT请求

时间:2015-06-27 15:23:36

标签: rest grails gorm grails-domain-class grails-2.4

我在grails中使用restful service。我有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 = {
    }
  } 

并在bootstrap中我可以创建新的人员条目如下

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 rest客户端

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

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

如何使用JSON执行相同的操作?我想使用POST和PUT方法进行插入和更新。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分: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 '时,您实际上执行' / app / person / index / 'with PersonInstance (如果需要,请调试它的源代码)。

同时仔细检查班级中的“ id ”列。