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

标签 grails groovy enums dns

在我的代码中,我有一个带有枚举类型的域对象。该枚举类型保存并从数据库中检索出精细值。我将域对象列表转换为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呈现方法编写一个测试,并确保该值是您期望的值,以便您不会忘记。

关于grails - 带有枚举的Grails JSON单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6878481/

相关文章:

grails - 我们可以在Grails中写Spring吗?

c - C 中的枚举迭代

c# - Enum.GetValues() 的内部工作

c++ - 寻找滥用枚举的替代方法

java - 如何在 Grails 3.3.11 中访问 src/main/java 中的 Domain 类?

tomcat - 数据库可能已在使用中 : “Locked by another process” when starting two grails apps from tomcat

Grails 服务->java.lang.NullPointerException : Cannot invoke method serviceMethod() on null object

java - Getter方法使用

java - 在我的构建器模式中找不到匹配的构造函数错误

unit-testing - PageRenderer 在单元测试期间返回空对象