代码之家  ›  专栏  ›  技术社区  ›  anish gandhi

使用不带jsp的springmvc下载Document对象

  •  0
  • anish gandhi  · 技术社区  · 9 年前

    我正在尝试使用POJO创建pdf文件,并使用springmvc下载它。我有Document对象,但无法下载该文件。它给出错误“找不到转换器”。

    @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;
    }
    

    这是一个视图创建者。接下来是堆栈跟踪

    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)
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   kswaughs    9 年前

    1. 按如下所示更改您的下载PDF服务。

      @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. 为上述“视图”属性配置新的ResourceBundleViewResolver。