Я разрабатываю простую систему резервирования в Grails 3.2.3 и хочу использовать новую библиотеку времени Java 8.Grails Java 8 Time JSON Simplification
@Resource(uri='/reservation', formats=['json'])
class Reservation {
String groupName
int groupSize
LocalDateTime dateTime
int durationMinutes
static belongsTo = [calendar:ReservationCalendar]
static constraints = {
calendar blank:false, nullable:false
groupName blank:false, size:2..30
groupSize blank:false, min:1
durationMinutes blank:false, min:1
dateTime validator: {
if (it.isAfter(LocalDateTime.now().plusMinutes(30L))) {
return true
} else {
return ['dateBeforeEarliestReservationTime']
}
}
}
}
Я вставил следующую запись в BootStrap.groovy:
def init = { servletContext ->
new ReservationCalendar(reservationObject:"reservable item1", reservationUnitsPerSlot:5).save()
new Reservation(calendar:1, groupName:"testers1", groupSize:2, dateTime:LocalDateTime.now().plusHours(2L), durationMinutes:30).save()
LocalDateTime maxDaysInFuture;
}
Теперь, когда я запустить приложение, все работает нормально. GET/резервирование URI называет индекс() действия и возврата:
[{"id":1,"calendar":{"id":1},"dateTime":{"class":"java.time.LocalDateTime","dayOfMonth":23,"dayOfWeek":{"enumType":"java.time.DayOfWeek","name":"MONDAY"},"dayOfYear":23,"hour":18,"minute":18,"month":{"enumType":"java.time.Month","name":"JANUARY"},"monthValue":1,"nano":629000000,"second":46,"year":2017,"chronology":{"calendarType":"iso8601","class":"java.time.chrono.IsoChronology","id":"ISO"}},"durationMinutes":30,"groupName":"testers1","groupSize":2}]
Но когда я иду, чтобы создать новую запись резервирования от некоторых Java-агностик клиента, я предпочел бы иметь какой-то способ не имея знать о лежащие в основе структуры данных и иметь некоторый чистый вход, например, строка даты:
[{"id":1,"calendar":{"id":1},"dateTime":"01-23-2017 6:30PM CST","durationMinutes":30,"groupName":"testers1","groupSize":2}]
Я читала Grails документации, но нет никаких четких примеров о том, как настроить вход/выход вашего ресурса. Мне нужен набор полей, таких как:
"dateTime":{"dayOfMonth":23,"month":1,"year":2017,"hour":18,"minute":30},
И создать объект времени из этих полей.