Представление XML с помощью Spring MVC

это действительно вопрос новичка: как я могу выводить XML с помощью Spring MVC версии 3.0.3.RELEASE? В настоящее время я использую Tiles2 с JSTL, и когда я хочу вывести PDF, т. Е. Я просто создаю средство визуализации представления, которое расширяет AbstractPdfView следующим образом:

public class PDFOutput extends AbstractPdfView {

    @Override
    protected void buildPdfDocument(Map<String, Object> model, Document doc,
    PdfWriter pdfWriter, HttpServletRequest request, HttpServletResponse response)
    throws Exception {

В таком случае, какой класс AbstractView следует расширить для создания XML-документа?

Заранее спасибо,


person Joaquín L. Robles    schedule 18.01.2011    source источник


Ответы (2)


Вероятно, проще всего расширить сам AbstractView. Мы делаем что-то вроде этого:

public class XMLView extends AbstractView {

  private final Document _xml;

  public XMLView(final Document xml) {
    _xml = xml;
  }

  @Override
  protected void renderMergedOutputModel(final Map<String, Object> model, final HttpServletRequest request, final HttpServletResponse response) throws Exception {
    response.setContentType("application/xml");
    response.setCharacterEncoding("UTF-8");
    // do stuff to serialize _xml to response.getOutputStream()
   }
}
person David North    schedule 18.01.2011
comment
Спасибо! Я попробую это решение! - person Joaquín L. Robles; 18.01.2011
comment
Дэвид, у меня возникли проблемы с этим подходом, когда я добавляю некоторый узел с буквальной строкой UTF-8, такой как áéíóú, он кодируется в ISO и доставляется в браузер таким образом, несмотря на определение кодировки документов и кодировку ответа http. это почему? - person Joaquín L. Robles; 26.09.2012
comment
Вы проверили кодировку самого исходного файла Java? Используете ли вы метод сериализации XML или конструктор, который по умолчанию использует кодировку платформы и имеет перегруженную версию, которая позволяет принудительно использовать UTF-8? - person David North; 27.09.2012
comment
Кодировка файла была правильной, я решил это здесь: stackoverflow.com/questions/12606462/ спасибо Дэвид - person Joaquín L. Robles; 27.09.2012

Благодаря Дэвиду Норту при использовании dom4j получен следующий код:

public class XMLView extends AbstractView {

    @Override
    protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {

    // set headers
    response.setContentType("application/xml");
    response.setCharacterEncoding("UTF-8");

    // construct XML document

    // output XML as String
    response.getOutputStream().print(doc.asXML());
}
person Joaquín L. Robles    schedule 18.01.2011