2017-01-20 5 views
0

Я только начал работать с Grails 2.4.4, и я пытаюсь создать REST api, который выводит JSON, но у меня есть проблема с этим, когда он делает объект JSON. Ниже перечислены класс домена, контроллер и objectmarshall.Grails rendering JSON

класс домена:

@Resource(uri='/users') 
class User { 
List contacts; 
String name; 
String password; 
static hasMany=[contacts:Contact] 
static constraints = { 

} 

static mapping = { 
    contacts lazy: false 
} 
} 

Контроллер:

class UserController { 

def index() { 
    //json 
    render User.getAll() as JSON 
} 

Boostrap заводной:

class BootStrap { 

def init = { servletContext -> 
    JSON.registerObjectMarshaller(User) { 
     def output = [:] 
     output['id'] = it.id 
     output['name'] = it.name 
     output['contacts'] = it.contacts 
     return output; 
    } 
    JSON.registerObjectMarshaller(Contact) { 
     def output = [:] 
     output['id'] = it.id; 
     output['name'] =it.name; 
     output['phoneNumber'] = it.phoneNumber; 
     output['userId'] = it.user.id; 
     return output; 
    } 
    } 
    } 

После я запускаю мое приложение в первый раз, она возвращает XML вместо JSON, но если Я делаю новое изменение, которое создаст горячее развертывание (например, если я добавлю комментарий), он будет генерировать JSON.

Что мне не хватает?

ответ

1

Попытка объявить тип контента с render(contentType:"application/json")

1

Я считаю создание карты, что вы хотите и рендеринга, что намного проще.

def renderMe = [name: "Joe"] 
render renderMe as JSON 
+0

что на самом деле исправлено, моя проблема заключалась в удалении аннотации @Resource. Кажется, что существует какой-то конфликт между аннотацией и методом «render as» – stack404