Search code examples
javaspring-mvcjasper-reportsspring-restcontroller

Jasper report and InternalResourceViewResolver - 404 not found error


I wish use JasperReport with Spring MVC, but I use InternalResourceViewResolver as a handling method. And when I call my report method it starts searching pdfReport.jsp page and shows me a 404 not found. But I need open report file, not the .jsp page!

My Controller method :

@RequestMapping(method = RequestMethod.GET, value = "/report/{id}")
public ModelAndView generatePdfReport(ModelAndView modelAndView) {
    LOG.debug("--------------generate PDF report----------");

    Map<String, Object> parameterMap = new HashMap<String, Object>();
    java.util.List<Node> nodeList = nodeService.list();
    JRDataSource JRdataSource = new JRBeanCollectionDataSource(nodeList);
    parameterMap.put("datasource", JRdataSource);

    // pdfReport bean has ben declared in the spring configuration
    return new ModelAndView("pdfReport", parameterMap);
}

My spring xml file configuration:

<mvc:annotation-driven/>
<tx:annotation-driven/>
<context:component-scan base-package="com.datum.fnd">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="contentType" value="text/html; charset=UTF-8" />
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
</bean>

<!-- Report pages beans  -->     
<bean id="pdfReport"
      class="org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView"
      p:url="classpath:reportTest.jrxml"
      p:reportDataKey="datasource" />

Solution

  • I have solved my problem with the some changes :

    1)Add follwing code to your spring xml configuration file :

    <!--  Jasper report  -->
    <import resource="jasper-views.xml"/>
    
    <bean class="org.springframework.web.servlet.view.XmlViewResolver">
        <property name="location" value="/WEB-INF/spring/jasper-views.xml"/>
        <property name="order" value="0"/>
    </bean>
    

    2)Create new jasper-views.xml file , copy and paste follwing codes to it:

     <?xml version="1.0" encoding="UTF-8"?>
     <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/util 
        http://www.springframework.org/schema/util/spring-util-3.0.xsd">
    
    <!--here all the url value should contains the valid path for the jrxml file-->
    
    <bean id="pdfReport"
          class="org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView"
          p:url="classpath:reportTest.jrxml"
          p:reportDataKey="datasource" />
    </beans>