Grails 无法接收序列化数据
Grails fail to receive serialized data
如何发送数据(JSON 或 XML)并在 grails 控制器中反序列化它?
我尝试了 render params
和 render 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
如何发送数据(JSON 或 XML)并在 grails 控制器中反序列化它?
我尝试了 render params
和 render 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