Grails JSON клетки с перечислением - PullRequest
1 голос
/ 30 июля 2011

В моем коде у меня есть доменный объект с типом Enum. Этот тип enum сохраняет и извлекает штраф из базы данных. Я преобразую список объектов домена в ячейки JSON. Все поля, кроме перечисления, являются либо строковыми, либо длинными. Когда json выбирается «на другой стороне», он отображает [Object object] для столбца вместо имени enum или значения enum. Есть ли что-то на стороне домена или json, которое поможет с этим? Код / пример ниже

Класс домена

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

Enum

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» легче забыть, тем более что один и тот же enum будет использоваться во многих объектах домена. Идеи?

1 Ответ

1 голос
/ 30 июля 2011

Поскольку вы просто помещаете его в список при построении объекта, он будет обрабатывать его как объект, если вы специально не сделаете с ним что-то еще (как вы делаете в настоящее время).

Одной из альтернатив будет использование it.enu as String или чего-то подобного, но это все еще, вероятно, не достигает того, чего вы пытаетесь достичь.

Другим (может быть, слишком сложным?) Способом было бы создать метод в самом домене, который возвращает значение, а затем использовать этот метод при сборке JSON:

class MyDomain {
    MyEnum enu

    def enuVal() {
        enu?.value
    }
}

с

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

Что касается меня, я бы предпочел использовать it.enu?.val в JSON. Напишите тест для ваших методов рендеринга JSON и убедитесь, что значение соответствует ожидаемому, чтобы вы не забыли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...