Spring MVC -> ответ JSON - PullRequest
       10

Spring MVC -> ответ JSON

13 голосов
/ 17 ноября 2010

У меня есть бэкэнд 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

Идентификатор и имя проекта должны быть возвращены во внешнюю систему, чтобы я мог создать список 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>

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

Ответы [ 5 ]

14 голосов
/ 17 ноября 2010

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

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

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

8 голосов
/ 11 декабря 2012

Вы также можете использовать JSONArray org.json и 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 ul, используя javascript или шаблон _underscore для визуализации вашего интерфейса.

8 голосов
/ 17 ноября 2010

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

1 голос
/ 29 января 2015

Остальные ответы крайне устарели! Теперь это очень просто

  • добавить Jackson2 к вашему classpath
  • использовать @RestController

ex:

@RestController
public class MyController {

    @RequestMapping("/thing")
    public MyThing thing() {
        return new MyThing();
    }

}

ref: http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-write-a-json-rest-service

1 голос
/ 18 ноября 2010

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

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