You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 21:05:14