Grails命令对象没有绑定

时间:2015-09-16 07:58:15

标签: grails

我正在为Grails Controller中的Command对象做一个POC,我面对的是一个没有发生绑定的路障。

命令对象

public class Employee {

    String name;

    int age;

    @Override
    public String toString() {
        return "Employee{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

控制器:

class EmployeeController {

    def index() {

        render (" Employee Index Called ");
    }

    def emp(Employee employee){

        println( employee.toString());
        render(" Success");

    }
}

我从其他客户端调用 emp 操作,如下所示

方法:发布

网址http://localhost:8080/Grails/employee/emp

请求正文 {“name”:“Vinod”,“年龄”:34}

我将employee.name设为null,employee.age = 0总是

我怀疑我的请求机构是错的但不确定。请在我出错的地方帮忙。

由于

3 个答案:

答案 0 :(得分:1)

据我所知,json没有自动绑定到命令对象(定义为操作方法arg),只有普通params。要暂停JSON请求,您必须致电

def json = request.JSON

然后你可以尝试将它绑定到你的对象:

def co = new MyCommandObject( json )

答案 1 :(得分:1)

对于POST请求方法,我必须设置' Content-Type'标题为' application / json'

Grails在POST的请求主体(JSON到Java Object)中从JSON构造命令对象

答案 2 :(得分:-1)

每当Grails发现'Content-Type'标题为'application / json'时,它会自动将JSON中的请求体解析为命令对象并将其传递给控制器​​方法。

您可能还希望通过执行以下操作使命令类可验证。 在Grails 3中: 您的命令类可以实现grails.validation.Validateable trait。

import grails.validation.Validateable

class Employee implements Validateable{
    String name
    int age
}

在Grails 2.x中: 您的命令类可以有grails.validation.Validateable注释

@grails.validation.Validateable
class Employee implements Validateable{
    String name
    int age
}