2014-01-07 1 views
0

Я использую Grails 2.3 и у меня есть домен с полем даты:Grails GORM Дата привязка

class DomainClass { 
    String title 
    Date datetime 
} 

И у меня есть JSON, поступающий в RestfulController с отметкой времени в миллисекундах:

{"title": "name", "datetime": 957044075522} 

контроллер правильно связывать название, но и для поля даты и времени, это на самом деле ошибка:

Could not find matching constructor for: java.util.Date(com.google.gson.internal.LazilyParsedNumber) 

Каков наилучший способ исправить это?

Спасибо.

+0

Вам может понадобиться, чтобы передать его в виде строки с в формате даты или обвязку – unekwu

ответ

1

Оба мозга F и zoran119 ответы имеют смысл, так что я голосовала их. Если кто-то делает то же самое, это реальный ответ, который работает:

@BindUsing({ obj, source -> source['datetime']?.longValue() }) 
Date datetime 
+0

пользовательские данные, которые я не знаю, аннотации BindUsing так что спасибо за обучение мне, действительно элегантное решение! Проголосовали соответственно. Просто любопытно, как вы обслуживаете возможный мусор, например, письма, отправленные в поле datetime? –

2

Я хотел бы попробовать использовать @BindingFormat аннотацию:

import org.grails.databinding.BindingFormat 

class DomainClass { 
    String title 
    @BindingFormat('MMddyyyy') 
    Date datetime 
} 

Вам нужно заменить MMddyyyy к чему-то, который будет работать для вас ...

1

Я рекомендовал бы против отправки миллисекунды, как вы теряете информацию о временных зонах ,

Если это не проблема для вас и вы хотите идти вперед, так как я бы просто рекомендовал использовать в контроллере объект команды, который анализирует его как строку и затем выполняет пользовательскую привязку.

class DomainCmd { 
    String title 
    String datetime 

    static constraints = { 
     datetime matches: /[0-9]{12}/ 
    } 
} 

Затем в контроллере;

myControllerAction(DomainCmd cmd) { 
    if (cmd.validate()) { 
     def myDomain = new DomainClass(title: cmd.title, datetime: new Date(cmd.datetime)) 
     // 
    } else { 
     // HTTP ERROR 
     response.status = 400 
    } 
} 

(также рассмотреть вопрос об использовании времени Joda вместо даты Java)

 Смежные вопросы

  • Нет связанных вопросов^_^