grails - 带有枚举的Grails JSON单元格

在我的代码中,我有一个带有枚举类型的域对象。该枚举类型保存并从数据库中检索出精细值。我将域对象列表转换为json单元格。除枚举外的所有字段都是字符串或长整数。当JSON在“另一侧”被拾取时,它将为列显示[Object object],而不是枚举名称或枚举值。在域或json方面是否有任何有助于解决此问题的方法?下面的代码/示例

域类

class MyDomain {
long id
long otherValue
MyEnum enu  //Nullable per constraints
//Mapping and constraints are not special. 
}

枚举
enum MyEnum {
ENUM1("Value1"),ENUM2("Value2")
//constructor ommitted
String myValue
String toString() { myValue }

Json细胞创建
def jsonCells = domainList.collect
    {
        [cell: [
                it.id,
                it.otherValue,
                it.enu?.value
            ],
            id: it.id]
    }

it.enu?.value有效。但是,有没有一种更好的方法可以做到这一点,而我不必每次都调用该值并且可以依赖该对象?我本以为重写toString方法会解决这个问题,但是显然我错了。我知道这似乎是一个小问题,但是它更容易忘记“.value”,特别是因为同一枚举将用于许多域对象中。有想法吗?

最佳答案

由于在构建对象时只是将其放入列表中,因此除非您专门对其进行其他操作(例如您当前正在执行),否则它将被视为对象。

一种替代方法是使用it.enu as String或类似的方法,但是仍然可能无法实现您要实现的目标。

另一种(也许是工程过度的方法?)方法是在域本身上创建一个返回值的方法,然后在构建JSON时使用该方法:

class MyDomain {
    MyEnum enu

    def enuVal() {
        enu?.value
    }
}


def jsonCells = domainList.collect {
    [cell: [
        it.enuVal()
    ],
    ...]

对于我来说,我想我只想在JSON中使用it.enu?.val。为您的JSON呈现方法编写一个测试,并确保该值是您期望的值,以便您不会忘记。

https://stackoverflow.com/questions/6878481/

相关文章:

javascript - Grails和Javascript

grails - Grails版本差异

grails - Grails:当我重新编译文件时(使用数据源时)服务器崩溃

hibernate - 如何在grails中保存具有hasOne和belongsTo关系的对象

hibernate - Grails级联删除?

hibernate - Grails域创建关联表

grails - 在Grails中使 session 无效

spring - Grails 2.0 注入(inject) bean 并在 Controller

grails - Grails中的URL映射问题:参数不正确

grails - 在Grails中删除对象的问题-缓慢,但仍未真正删除