Правильный способ сериализации POJO в JSON / XML для использования в JSP - PullRequest
0 голосов
/ 23 марта 2011

Я пытаюсь реализовать этот вариант использования RESTful в моем приложении Spring MVC.Представьте себе, что POJO называется SalesReport со списком продаж.Используя согласование содержимого, я могу вернуть представления XML и JSON.Например ...

 <SalesReport>
     <Sale>...</Sale>
 </SalesReport>

Для моего HTML-представления это, конечно, должно быть более сексуально.Требуется отобразить диаграмму с использованием Highcharts, а также данные в табличном формате.Довольно стандартные вещи.Я не уверен, как сделать это элегантным способом.Я думал о

  1. Сериализация SalesReport в форматированную строку XML / JSON и выполнение request.setAttribute().Я чувствую, что это соединяет мой контроллер с моим взглядом.Моим представлениям XML и JSON это не нужно.

  2. Выполнение вызова AJAX для получения данных после загрузки JSP.Это кажется расточительным, чтобы сделать еще один HTTP-запрос, и мои данные тоже не кэшируются.

  3. Создайте класс util с функциями, которые используют библиотеки JSON и XML Spring MVC для возврата нужного мне сериализованного формата.Затем в JSP сделайте что-то вроде <%= RestUtil.toJSON(salesReport) %>.Таким образом, мой контроллер не знает особенностей моего представления HTML, и я не отправляю лишние HTTP-вызовы.

Какой хороший подход к этому?

1 Ответ

0 голосов
/ 23 марта 2011

Зачем вам использовать JSON / XML в JSP?Использование контента-согласования text / html должно соответствовать методу контроллера.Вы можете получить доступ к POJO напрямую с помощью пружинной формы tld или JSTL в jsp.

При условии, что у вас настроен преобразователь вида:

@RequestMapping("salesreport")
public String getSalesReport(ModelMap model) {
   model.addAttribute("reports", salesReportService.findAll());
   return "reports/view";
}

В отчетах / view.jsp:

<c:forEach items="reports" var="report">
   Field 1: ${report.field1} <br/>
   Field 2: ${report.field2}
</c:forEach>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...