ServletRegistrationBean<MessageDispatcherServlet>有界不匹配错误求解
问题分析与修复方案
嘿,我帮你梳理下代码里的问题,你遇到的有界不匹配和编译错误主要来自这几个点:
1. 多余的servletContext.addServlet调用
你完全不需要手动调用这行代码来注册Servlet!ServletRegistrationBean本身就是Spring Boot用来帮你注册Servlet的封装类,只要把这个Bean交给Spring容器,它会自动完成注册流程。而且你这里的servletContext变量既没声明也没传参,这本身就是个编译错误,直接删掉这行就行。
2. 泛型边界不匹配的根源
如果确实弹出有界不匹配的错误,大概率是你导入的MessageDispatcherServlet不对。Spring WS里的MessageDispatcherServlet是继承自HttpServlet的,完全符合ServletRegistrationBean泛型要求的? extends Servlet边界。请检查你的导入语句,必须是Spring Web Services的官方实现:
import org.springframework.ws.transport.http.MessageDispatcherServlet;
要是导入了其他包下的同名类,就会出现泛型不兼容的问题。
修复后的完整代码
这是修正后的方法,解决了所有问题:
public ServletRegistrationBean<MessageDispatcherServlet> requestDispatcher(ApplicationContext context) { MessageDispatcherServlet msd = new MessageDispatcherServlet(); msd.setApplicationContext(context); msd.setTransformWsdlLocations(true); // 去掉了多余的addServlet调用,修正了参数拼写错误(conext→context) return new ServletRegistrationBean<>(msd, "/soap/*"); }
额外小提醒
- 你之前把
context拼写成了conext,虽然这不是泛型错误的原因,但会影响代码正确性,已经帮你修正了。 - 确保项目里已经引入了Spring Web Services的依赖(比如Maven的
spring-ws-core),不然MessageDispatcherServlet类会找不到哦。
内容的提问来源于stack exchange,提问作者dori rozen
相关产品推荐
相关产品推荐

