向Grails 4 REST API发送curl POST请求时遇类属性非空错误
Grails 4.0.10 使用@Resource注解时POST请求报错属性不可为空的问题
问题描述
我用REST应用模板创建了Grails 4.0.10项目,想验证@Resource注解的作用——按文档说明,在Domain类上标注该注解后无需手动编写控制器。
我的Domain类代码如下:
package book import grails.rest.Resource @Resource(uri='/books', formats=['json', 'xml']) class Book { String title static constraints = { } }
启动应用后,执行以下curl命令尝试创建Book资源:
`curl -i -X POST -H "Content-Type: application/json" -d '{"title":"Along Came A Spider"}'` localhost:8080/books
但收到了类属性不可为空的错误,请问哪里操作有误?
解决方案
核心问题:curl命令写法错误
你给出的curl命令中,错误地将整个curl命令用反引号括起来,这会导致Shell把反引号内的内容当作命令替换执行——也就是先运行反引号里的curl,再把它的输出当作参数传给后面的localhost:8080/books,最终服务器根本没收到你要提交的JSON数据,自然触发title的非空约束错误(Grails中未显式配置的属性默认nullable: false)。
修正后的curl命令
直接去掉反引号,正确的命令如下:
curl -i -X POST -H "Content-Type: application/json" -d '{"title":"Along Came A Spider"}' localhost:8080/books
额外验证建议
如果修正命令后仍有问题,可以临时调整Domain类的约束,验证请求是否能正常绑定:
static constraints = { title nullable: true // 临时放开非空约束,测试是否能接收到title值 }
如果能成功创建数据且title字段值正确,再改回nullable: false即可。
内容的提问来源于stack exchange,提问作者kofhearts
相关产品推荐
相关产品推荐

