Как попасть в JSON в Grails 2.0 - PullRequest
0 голосов
/ 26 марта 2012

Я отправляю себе JSON так же с jQuery:

$.ajax
({
  type: "POST",
  url: 'http://localhost:8080/myproject/myController/myAction',
  dataType: 'json',
  async: false,
  //json object to sent to the authentication url
  data: {"stuff":"yes",
         "listThing":[1,2,3],
         "listObjects":[{"one":"thing"},{"two":"thing2"}]},
  success: function () {
    alert("Thanks!"); 
  }
})

Я отправляю это на контроллер и делаю

println params

И я знаю, что у меня уже проблемы ...

[stuff:yes, listObjects[1][two]:thing2, listObjects[0][one]:thing, listThing[]:[1, 2, 3], action:myAction, controller:myController]

Я не могу понять, как получить большинство из этих значений ...

Я могу получить "да" с params.stuff, но я не могу сделать params.listThing.each {} или params.listObjects.each {}

Что я делаю не так?

ОБНОВЛЕНИЕ:

Я заставляю контроллер делать это, чтобы попробовать два предложения:

println params
println params.stuff
println params.list('listObjects')
println params.listThing
def thisWontWork = JSON.parse(params.listThing)
render("omg l2json")

посмотрите, как странно выглядят параметры в конце исключения нулевого указателя, когда я пытаюсь ответить:

[stuff:yes, listObjects[1][two]:thing2, listObjects[0][one]:thing, listThing[]:[1, 2, 3], action:l2json, controller:rateAPI]
yes
[]
null
| Error 2012-03-25 22:16:13,950 ["http-bio-8080"-exec-7] ERROR   errors.GrailsExceptionResolver  - NullPointerException occurred when processing request: [POST] /myproject/myController/myAction - parameters:
stuff: yes
listObjects[1][two]: thing2
listObjects[0][one]: thing
listThing[]: 1
listThing[]: 2
listThing[]: 3

ОБНОВЛЕНИЕ 2 Я изучаю вещи, но это не может быть правильным:

println params['listThing[]']
println params['listObjects[0][one]']

печать

[1, 2, 3]
thing

Похоже, это какая-то часть Grails нового JSON-маршалинга. Это несколько неудобно для моих целей хакерства с ценностями. Как мне вернуть все эти отдельные параметры обратно в большой интересный объект вложенных карт и списков?

Может быть, я не делаю то, что я хочу с jQuery?

ОБНОВЛЕНИЕ jQuery была проблема: Grails: откуда берется request.JSON, и как я могу поместить туда с помощью .ajax () или .post () jQuery?

Ответы [ 3 ]

1 голос
/ 26 марта 2012

Извините, если 2.0 изменил это поведение, но в 1.3.7 я использовал следующее для анализа данных JSON:

request.JSON.each {params  ->
...

попробуй.

1 голос
/ 28 марта 2012

Если вы отправляете JSON обратно в контроллер, лучше всего сделать так, чтобы Grails поместил его обратно в ваши объекты.

Обратите внимание на атрибут parseRequest ниже

"/product/$id"(controller: "product", parseRequest: true) {
    action = [GET: "show", PUT: "update", DELETE: "delete", POST: "save"
}

Тогда в вашем контроллере это просто:

def save = {
    def productInstance = new Product(params.product)
}

Нет необходимости анализировать ваши параметры или что-то еще.Это, конечно, при условии, что вы можете структурировать свой JSON в домен.

0 голосов
/ 26 марта 2012

params всегда входят как строки, поэтому вам нужно что-то сделать, чтобы преобразовать входные данные в фактический список. Вы можете сделать это с grails.converters.JSON.parse(params.listThing).

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