You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring 5.3.9升级后AbstractPDF控制器调用出现SRVE0295E 404错误求助

Spring 5.3.9升级后PDF生成控制器404问题排查

嘿,我来帮你梳理这个升级后遇到的404问题!从你给出的代码和配置来看,核心问题大概率是把PDF视图组件当成控制器来配置映射了,Spring 5.x对组件类型的校验更严格,导致旧的配置逻辑失效。下面给你具体的排查和修复方案:

核心问题分析

你写的IndividualApplicationPdfPublicController继承了AbstractPdfView——这是Spring MVC的视图组件,用来渲染PDF内容的,不是处理请求的控制器。但你却通过SimpleUrlHandlerMapping把它当成控制器来绑定URL,这种写法在旧版本Spring可能能凑合用,但在5.x版本里会因为组件类型不匹配导致映射失效,触发404错误。

修复方案(两种可选)

方案一:保留AbstractPdfView,用视图解析器匹配

这种方式适合想保留原有PDF视图逻辑的场景:

  1. 添加BeanNameViewResolver配置,让Spring通过视图名找到对应的PDF视图bean:
<beans:bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
    <!-- 设置优先级,确保比其他视图解析器先生效 -->
    <beans:property name="order" value="1"/>
</beans:bean>
  1. 移除原来的publicUrlMapping配置,因为不需要再通过URL绑定视图,而是通过视图名匹配bean id。
  2. 确认业务控制器返回的ModelAndView中的视图名individualApplication.pdf.html,和你定义的PDF视图bean的id完全一致——BeanNameViewResolver会自动根据视图名查找同名的View bean并渲染。

方案二:改成注解式控制器(Spring 5.x最佳实践)

这种方式更符合当前注解驱动的开发模式,也更稳定:

  1. 修改PDF控制器类,改成注解驱动的控制器,不再继承AbstractPdfView:
@Controller
public class IndividualApplicationPdfPublicController {

    @GetMapping("/public/individualApplication.pdf.html")
    public void generatePdf(@RequestParam Map<String, Object> model, 
                            HttpServletRequest request, 
                            HttpServletResponse response) throws Exception {
        // 设置响应头,告诉浏览器返回的是PDF文件
        response.setContentType("application/pdf");
        response.setHeader("Content-Disposition", "inline; filename=individualApplication.pdf");

        // 初始化PDF文档和Writer
        Document document = new Document();
        PdfWriter pdfWriter = PdfWriter.getInstance(document, response.getOutputStream());
        
        // 这里复制你原来在buildPdfDocument里的PDF内容构建逻辑
        document.open();
        // 示例:从model取数据并添加到PDF
        String applicantName = (String) model.get("applicantName");
        document.add(new Paragraph("Applicant: " + applicantName));
        // 更多PDF内容构建代码...
        
        document.close();
        pdfWriter.close();
    }
}
  1. 确保Spring配置文件启用了注解驱动:
<mvc:annotation-driven/>
  1. 确认控制器所在的包被Spring扫描到:
<context:component-scan base-package="controller.pdf"/>
  1. 移除原来的individualApplication.pdf.html bean配置和publicUrlMapping配置,注解已经处理了URL映射。

额外排查点

如果按照上面的方案修复后还是有问题,可以检查这几点:

  • DispatcherServlet映射范围:在web.xml(或Java Servlet配置)中,确保DispatcherServlet的<url-pattern>能覆盖/public/individualApplication.pdf.html,比如用<url-pattern>/</url-pattern>(如果有静态资源,记得加<mvc:default-servlet-handler/>)。
  • Bean初始化状态:启动项目时查看日志,确认IndividualApplicationPdfPublicController已经被成功加载到Spring容器中,没有初始化错误。
  • 请求路径正确性:用浏览器开发者工具查看实际请求的URL,确认是否带上了项目的上下文根(比如部署在/myapp下,实际路径应该是/myapp/public/individualApplication.pdf.html)。

内容的提问来源于stack exchange,提问作者user3067524

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 01:12:47