2014-09-19 3 views
2

Я создаю API RESTful, и создаваемые конечные точки используют объекты команд для проверки данных запроса. Я пытаюсь найти лучший способ сделать ошибки проверки как json. Для ответов XML я выполнил рекомендацию в Grails в книге действий и сделал ...Grails - отображать ошибки проверки как JSON

response.status = 403 
    render(contentType: "text/xml") { 
     errors { 
      eventSaleDataCommand.errors.fieldErrors.each { err -> 
       field(err.field) 
        message(g.message(error: err)) 
       } 
      } 
     } 

Это хорошо работает для визуализации ответов XML, так что я задаюсь вопросом, что рекомендованный подход для оказания ответов JSon это?

Я хотел бы иметь некоторый контроль, как получает отображается ошибка так и для ответа JSon я добавил:

def results = eventSaleDataCommand.errors.fieldErrors.toList() 
def errors = [] 
for (error in results) { 
    errors.add([ 
     'type'   : 'invalid_entry', 
     'field'   : error.field, 
     'rejected_value': error.rejectedValue, 
     'message'  : error.defaultMessage 
    ]) 
} 
render errors as JSON 

Проблема с этим подходом является, я использую время Joda плагин, так что я получаю следующее исключение, когда я пытаюсь сделать карту в формате JSON:

Class org.codehaus.groovy.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller can not access a member of class org.joda.time.tz.DateTimeZoneBuilder$PrecalculatedZone with modifiers "public".

Кто-нибудь знает способ обойти это?

+0

Вы пытались сменить contentType на 'text/json', не так ли? – injecteer

+0

Да. Я получаю исключение: 'java.lang.IllegalArgumentException: Элементы массива должны быть определены с помощью вызова метода« element », например: element (value)' – user1866924

ответ

4

Как насчет?

render eventSaleDataCommand.errors.fieldErrors as JSON 
Смежные вопросы