使用 spring mvc 不使用 jsp 下载文档对象

download Document object using spring mvc without jsp

我正在尝试使用 POJO 创建 pdf 文件并使用 spring 下载它 mvc.i 已获得文档对象但无法下载文件。它给出错误 "could not find convertor".

@RequestMapping(value = "/downloadPDF", method = RequestMethod.GET)
public Document downloadPDF() throws FileNotFoundException, DocumentException {
    // create some sample data
    List<EmployeeInfo> employeeList = new ArrayList<EmployeeInfo>();
    employeeList.add(new EmployeeInfo("1", "Anish", "surat"));
     return downloadPDFService.createPDF(employeeList);

我怎样才能下载这个文件。 请提供答案

public Document createPDF( List<EmployeeInfo> employeeList) throws FileNotFoundException, DocumentException {

    Document document = new Document();
     PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("AddTableExample.pdf"));
        document.open();
        PdfPTable table = new PdfPTable(3);
        table.setWidthPercentage(100); //Width 100%
        table.setSpacingBefore(10f); //Space before table
        table.setSpacingAfter(10f); //Space after table
        PdfPCell cell = new PdfPCell();
        cell.setBackgroundColor(BaseColor.BLUE);
        cell.setPadding(5);
        Font font = FontFactory.getFont(FontFactory.HELVETICA);
        font.setColor(BaseColor.WHITE);
        cell.setPhrase(new Phrase("Id", font));
        table.addCell(cell);

        cell.setPhrase(new Phrase("Name", font));
        table.addCell(cell);

        cell.setPhrase(new Phrase("Address", font));
        table.addCell(cell);
        for (EmployeeInfo aBook : employeeList) {
            table.addCell(aBook.getEmpId());
            table.addCell(aBook.getEmpName());
            table.addCell(aBook.getEmpAddress());
        }
        document.add(table);
        document.close();
        writer.close();
        return document;
}

这是一个视图creator.next是堆栈跟踪

HTTP Status 500 - Request processing failed; nested exception is            java.lang.IllegalArgumentException: 
No converter found for return value of     type: class com.itextpdf.text.Document
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: No converter found for return value of type: class com.itextpdf.text.Document
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

根本原因

java.lang.IllegalArgumentException: No converter found for return value of type: class com.itextpdf.text.Document
org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:178)
org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:153)
org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:165)
org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:80)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:126)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

虽然你不想jsp,你仍然可以使用ModelAndView。

  1. 如下更改您的 DownloadPDFService。

    @Component
    public class DownloadPDFService extends AbstractPdfView {
    
    @Override
    protected void buildPdfDocument(Map<String, Object> model, Document doc,
        PdfWriter writer, HttpServletRequest req, HttpServletResponse resp)
        throws Exception {
    
        // Retrieve your model as below
        List<EmployeeInfo> employeeList =  (List<EmployeeInfo>) model.get("employeeList");
    
        // continue your document build logic
    
        }
      } 
    
  2. 如下更改您的控制器

    @RequestMapping(value = "/downloadPDF", method = RequestMethod.GET)
    public Document downloadPDF() throws FileNotFoundException, DocumentException {
       // create some sample data
       List<EmployeeInfo> employeeList = new ArrayList<EmployeeInfo>();
       employeeList.add(new EmployeeInfo("1", "Anish", "surat"));
       return new ModelAndView("pdfView", "employeeList",  employeeList);
    }
    
  3. 在views.properties

    中添加以下视图配置
    pdfView.(class)= YourpackageName.DownloadPDFService
    
  4. 为上述 "views" 属性配置一个新的 ResourceBundleViewResolver。