在我的代码中,我有一个带有枚举类型的域对象。该枚举类型保存并从数据库中检索出精细值。我将域对象列表转换为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/