Grails 无法接收序列化数据

Grails fail to receive serialized data

如何发送数据(JSON 或 XML)并在 grails 控制器中反序列化它?

我尝试了 render paramsrender request.JSON 返回空值 json,还有命令 approach

import grails.converters.JSON

class TestController {

    def test(RestCommand r){
        render r as JSON
    }

}

class RestCommand {
    String data

    static constraints = {
        data nullable: false
    }

}

结果是

{"data":null,"errors":{"errors":[{"object":"x.x.RestCommand","field":"data","rejected-value":null,"message":"Property [data] of class [class x.x.RestCommand] cannot be null"}]}}

这是我的 curl 请求:

curl -X POST --header "Content-Type:application/json" --data '{"id":1}' localhost:8080/myApp/myController/myMethod

P.S。我在 stackexchange 中查看过类似的问题,但正如我上面所讨论的,none 的方法有效。

你这样做的方式是有效的(发送 JSON 到控制器并反序列化)。如果您将 JSON 发送到此操作,该命令将绑定接收到的数据(就像您的示例中那样)。您的问题是卷曲测试中的数据无效。通常,您会检查命令是否有错误,例如:

def test(RestCommand r){
    if(r.hasErrors()) {
       // handle error
       response.status = 400
       render "error"
       return
    }
    render "ok"
}

Grails 为您提供序列化对象,您的数据只需要与命令具有相同的字段即可。

这对我有用:

import grails.converters.JSON

class TestController {

    def test(RestCommand r){
        if(r.hasErrors()) {
           render (
               status: 400, 
               text: r.getErrors() as JSON)
        } else {
            render "id: "+r.id+" data: "+r.someData
        }
    }

}

class RestCommand {
    Integer id
    String someData

    static constraints = {
        id nullable: false
    } 

}

请求如下:

curl -X POST --header "Content-Type:application/json" --data '{"id":1,"someData":"here you go some data"}' localhost:8080/myapp/test/test

结果:

id: 1 data: here you go some data