Spring MVC → ответ JSON

Я hava-сервер JAVA EE, и я использую Spring MVC. У меня есть вызов AJAX:

function getAllProjects() {
        $.getJSON("project/getall", function(allProjects) {
            ???
        });
    }

Моя бэкэнд-система:

@RequestMapping(value="/getall", method=RequestMethod.GET)
public @ResponseBody ??? getAllProjects() {
    ???
}

Какое содержимое я должен реализовать, чтобы он работал? В бэкэнд-системе у меня из базы данных вызывается уникальный идентификатор и имя проекта, например:

1 => My Test Project
4 => Another One
23 => One More Test

Идентификатор id и имя проекта должны быть возвращены во внешнюю систему, поэтому я могу создать список HTML ul/li в этом виде:

<ul>
    <li><a href="/1">My Test Project</a></li>
    <li><a href="/4">Another One</a></li>
    <li><a href="/23">One More Test</a></li>
</ul>

Кто-нибудь знает, как это можно сделать?

Ответ 1

Вам необходимо:

  • Добавить Jackson JSON Mapper в путь к классам
  • Добавьте <mvc:annotation-driven> в конфигурацию
  • Возврат Map<Integer, String>

Для более сложных случаев, когда вам нужно настроить процесс сопоставления для каждого метода обработчика, вы можете использовать MappingJacksonJsonView вместо @ResponseBody, как предложил Stepen C.

Ответ 2

Вам нужно прочитать главу 15.5 руководства пользователя Spring, в котором описывается, как настраивать представления MVC, и главу 16.10, которая кратко описывает представление отображения JSON. Затем прочитайте javadocs для MappingJacksonJsonView и т.д.

Ответ 3

Вы также можете использовать org.json JSONArray и JSONObject для построения вывода JSON, а затем вернуть значение String в качестве @ResponseBody.

http://www.json.org/javadoc/org/json/JSONObject.html

@RequestMapping(value="/getall", method=RequestMethod.GET)
public @ResponseBody String getAllProjects() {
    ...
    JSONArray jsonItems = new JSONArray();

    JSONObject jsonItem1 = new JSONObject();
    jsonItem1.put("id", "1");
    jsonItem1.put("name", "My Test Project");

    JSONObject jsonItem2 = new JSONObject();
    jsonItem2.put("id", "4");
    jsonItem2.put("name", "Another one");

    jsonItems.put(jsonItem1);
    jsonItems.put(jsonItem2);

    return jsonItems.toString();
}

Вы должны получить что-то подобное в своем обратном вызове с запросом на успех ajax.

[{
   "id":"1",
   "name":"My Test Project"
},{
   "id":"4",
   "name":"Another one"
}]

Вы можете использовать эти данные для добавления своего ul li с помощью javascript или с помощью шаблона _underscore для визуализации вашего пользовательского интерфейса.

Ответ 4

Как предлагается здесь: Spring 3 JSON с MVC проверить этот сайт: http://spring-json.sourceforge.net/ У этого есть прекрасный хороший рабочий пример о том, как это сделать в рамках spring.