Обрабатывающий комплекс JSON с Spring 3 MVC - PullRequest
0 голосов
/ 16 января 2012

Я пытаюсь обработать JSON ниже с помощью Spring 3 MVC:

var fields = {
    "fields" : [ {
        "groupId" : "mission",
        "type" : "text",
        "id" : "company_name",
        "label" : "Nom de l'entreprise",
        "size" : 0
    }, {
        "groupId" : "mission",
        "type" : "text",
        "id" : "theme",
        "label" : "Thème",
        "size" : 0
    }, {
        "groupId" : "mission",
        "type" : "textarea",
        "id" : "descriptive",
        "label" : "Description",
        "size" : 0
    } ]
};

Вот как я это отправляю:

$.ajax({
  type: "POST",
  url: "/GestaWeb/internshipConfiguration/proposal",
  data: fields
}).done(function( msg ) {
  alert( "Data Saved: " + msg );
});

Параметры, передаваемые через http (это копия консоли веб-разработчика Chrome):

fields[0][groupId]:mission
fields[0][type]:text
fields[0][id]:company_name
fields[0][label]:Nom de l'entreprise
fields[0][size]:0
fields[1][groupId]:mission
fields[1][type]:text
fields[1][id]:theme
fields[1][label]:Thème
fields[1][size]:0
fields[2][groupId]:mission
fields[2][type]:textarea
fields[2][id]:descriptive
fields[2][label]:Description
fields[2][size]:0

И мой контроллер Spring 3 MVC:

package controller.internshipConfiguration;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.*;

@Controller
@RequestMapping(value = "/internshipConfiguration")
public class ProposalModelConfigurationController {

    @RequestMapping(value = "/proposal", method = RequestMethod.GET)
    public ModelAndView form(ModelMap model) {
        System.out.println("internship config view");
        return new ModelAndView("internship/formModel");
    }

    @RequestMapping(value="/proposal", method = RequestMethod.POST)
    public @ResponseBody String form(@RequestParam(value="fields") String fields) {

        System.out.println("Fields rofl: " + fields);

        return "ok";
    }

}

Когда я выполняю Аякс, у меня 400. Это работает нормально, если я передаю простой объект, как это: {fields: "foo"}

1 Ответ

0 голосов
/ 16 января 2012

установить для contentType json в вызове ajax:

$.ajax({
  type: "POST",
  url: "/GestaWeb/internshipConfiguration/proposal",
  data: fields,
  contentType: "application/json"
}).done(function( msg ) {
  alert( "Data Saved: " + msg );
});

Вы также должны создать класс java, соответствующий полям - Джексон / Спринг будет автоматически приводить класс в действие. Итак, ваш контроллер хотел бы что-то вроде этого:

@RequestMapping(value="/proposal", method = RequestMethod.POST)
public @ResponseBody String form(@RequestBody MyPojoForFields myPojoForFields){}

MyPojoForfields - это обычно объект домена или DTO.

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

Подробнее здесь .

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