JQuery JQGrid: как упростить вывод JSON через Spring MVC - PullRequest
1 голос
/ 18 ноября 2010

Как создать тот же формат JSON, который требуется для JqGrid:

Прямо сейчас мой Spring Controller может выдавать следующий вывод JSON:

{
    "records":"5",
    "total":"20",
    "page":"1"
    "rows":[
        {"id":"1","cell":["1","john","smith"]},
        {"id":"2","cell":["2","jane","adams"]}
        ]
}

Вот метод Spring Controller, который производит этот вывод:

@RequestMapping(value = "/json", method = RequestMethod.GET)
public @ResponseBody getUsers viewUsersAsJSON() {

    logger.debug("Retrieving all users as JSON");

    UsersJsonDTO usersJsonDTO = new UsersJsonDTO();
    usersJsonDTO.setPage("1");
    usersJsonDTO.setRecords("5");
    usersJsonDTO.setTotal("20");

    ArrayList<RowJson> rowJsonList = new ArrayList<RowJson>();
    for (UserRoleDTO userRoleDTO:userRoleServiceFacade.getAll()) {  
        RowJson rowJson = new RowJson();
        rowJson.setId(userRoleDTO.getId().toString());
        rowJson.setCell(userRoleDTO.getFirstName());
        rowJson.setCell(userRoleDTO.getLastName());

        rowJsonList.add(rowJson);
    }

    usersJsonDTO.setRows(rowJsonList);

    return usersJsonDTO;
}

Вот пользователи JsonDTO:

public class UsersJsonDTO {

    private String page;
    private String total;
    private String records;
    private ArrayList<RowJson> rows;

    ...getters/setters etc...
}

Вот РоуДжсон:

public class RowJson {

    private String id;

    private List<String> cell;

    public RowJson() {
        cell = new ArrayList<String>();
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public List<String> getCell() {
        return cell;
    }

    public void setCell(String cell) {
        this.cell.add(cell);
    }


}

Это те классы, которые необходимы для создания примера вывода, который я дал в начале этого вопроса. @ResponseBody автоматически преобразует возвращаемый объект в JSON. См. Spring Ajax Упрощения 3.0

Я хочу намного более понятную и простую реализацию. Я хочу что-то вроде этого (конечно, я пробовал это, и это не дает правильный вывод):

@RequestMapping(value = "/json", method = RequestMethod.GET)
public @ResponseBody getUsers viewUsersAsJSON() {

    logger.debug("Retrieving all users as JSON");

    UsersJsonDTO usersJsonDTO = new UsersJsonDTO();
    usersJsonDTO.setPage("1");
    usersJsonDTO.setRecords("5");
    usersJsonDTO.setTotal("20");

    usersJsonDTO.setRows(userRoleServiceFacade.getAll());

    return usersJsonDTO;
}

Есть идеи? Спасибо за ваше время.

Мне также нравится выводить следующий формат:

{
    "records":"5",
    "total":"20",
    "page":"1"
    "rows":[
        {"id":"1","cell":["id":"1","name":"john","lastname":"smith"]},
        {"id":"2","cell":["id":"2","name":"jane","lastname":"adams"]}
        ]
}

Однако, когда я пытаюсь это сделать, я получаю следующие дополнительные фигурные скобки (между ячейкой и id):

{
    "records":"5",
    "total":"20",
    "page":"1"
    "rows":[
        {"id":"1","cell":[{"id":"1","name":"john","lastname":"smith"}]},
        {"id":"2","cell":[{"id":"2","name":"jane","lastname":"adams"}]}
        ]
}

Много вопросов, но я думаю, что они связаны.

Ответы [ 2 ]

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

Мне также хотелось бы иметь возможность выводить следующий формат:

Это неверный JSON. В частности, следующее:

["id":"1","name":"john","lastname":"smith"]

A [] обозначает литерал массива, а массивы JSON являются списками, они могут содержать только числовые индексы. Если вам нужен хеш (он же map и т. Д.), С помощью которого вы можете использовать строковые ключи, то вы должны использовать объект, и именно поэтому {}, литерал объекта, продолжает вставляться.

0 голосов
/ 18 ноября 2010

Я нашел решение.Сначала позвольте мне представить, как я получил ответ.Я читал статью jQuery Grid Data с jqGrid Джеком Алтьером .Он указал на ссылку на вики JqGrid, которую я уже читал ранее.Затем он также указал другую ссылку на эти Данные JSON , в которой содержится информация о том, какой формат JSON ожидает JqGrid.Я думаю, что это копия официальной документации, но на первый взгляд намного проще из-за более крупного шрифта.

Вам нужно сделать это в формате JqGrid Javascript, вам нужно установить для повторяющихся элементов значение ложь .Это позволит вам использовать следующий формат:

    {
        "records":"5",
        "total":"20",
        "page":"1"
        "rows":[
            {"id":"1","name":"john","lastname":"smith"},
            {"id":"2","name":"jane","lastname":"adams"}]
   }

Реализация My Spring Controller:

@RequestMapping(value = "/json", method = RequestMethod.GET)
public @ResponseBody getUsers viewUsersAsJSON() {

    logger.debug("Retrieving all users as JSON");

    UsersJsonDTO usersJsonDTO = new UsersJsonDTO();
    usersJsonDTO.setPage("1");
    usersJsonDTO.setRecords("5");
    usersJsonDTO.setTotal("20");

    usersJsonDTO.setRows(userRoleServiceFacade.getAll());

    return usersJsonDTO;
}

Достиг ли я того, о чем просил.Определенно да!Дело закрыто:)

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