解决springboot发布web service请求后 项目无法接收http请求的问题

背景:公司的一个项目二次开发,之前客户端都是调用web service来访问,突然增加了一个需求必须要用http请求来访问

我想这么简单,搞个控制器,然后搞个@requestMapping("xxx"),实际操作的时候傻眼了,http请求怎么都访问不到我的控制器,

简直脑kuo痛,网上查了半天资料才找到原因。

 

原因:

springboot默认注册的是 dispatcherServlet,当手动配置 ServletRegistrationBean后springboot不会再去注册默认的dispatcherServlet,所以需要我们在启动类里手动去注册一个dispatcherServlet,

就是在发布web service的时候  已经手动配置过ServletRegistrationBean了,然后boot就不注册默认的dispatcher,不注册我的http请求谁给我转发?难不成 要我自己用意念去转发?明白了错误原因就好解决了,在启动类里在手动配置一个dispatcher就好了。

//webservice代码

/**
 * webService 发布
 */
@Configuration
public class CxfConfig {

    @Bean
     public ServletRegistrationBean dispatcherServlet() {
         return new ServletRegistrationBean(new CXFServlet(), "/*");
     }
         @Bean(name = Bus.DEFAULT_BUS_ID)
         public SpringBus springBus() {
             return new SpringBus();
         }
         @Bean
         public IcardCenterForGJ izkzxService() {
             return new IcardCenterForGJImpl();
         }
         @Bean
         public Endpoint endpoint() {
             EndpointImpl endpoint = new EndpointImpl(springBus(), izkzxService());
             endpoint.publish("/Service");
             return endpoint;
         }
}

注意上面第一个@bean已经配置了ServletRegistrationBean

 

下面在启动类里再加一个@bean

/**
	* @Description:  手动配置dispatcher 转发http请求
	* @Param: []
	* @return: org.springframework.boot.web.servlet.ServletRegistrationBean
	* @Author: chenchuan
	* @Date: 2019/04/18
	*/
	@Bean
	public ServletRegistrationBean dispatcherServlet(){
		//注解扫描上下文
		AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
		//项目包名
		applicationContext.scan("com.ets.*");
		DispatcherServlet my_dispatcherServlet = new DispatcherServlet(applicationContext);
		ServletRegistrationBean registrationBean = new ServletRegistrationBean(my_dispatcherServlet);
		registrationBean.setLoadOnStartup(1);
		registrationBean.addUrlMappings("/*");
		return registrationBean;
	}

注意:cxf的ServletRegistrationBean的方法名和手动配置的ServletRegistrationBean方法名不能相同 因为注解@bean  方法名相当于id   相同的话id冲突,cxf的就不能用了

重点注意:如果两个dispatherService还是冲突的话 就干点虚拟路径 即改写成 endpoint.publish("/");

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值