MIME media type application/json;charset=UTF-8 was not found

1. 记一次异常解决,比较冷门的问题

场景: 使用eureka-client连接eureka-server时,client向server定时发出心跳包,但是抛出了两层异常

项目使用了springcloud将服务打成war包,放在tomcat8.5上面跑,本地跑springboot-main,no bug,但是一打war包上服务器,除了第一次注册ok,后续的心跳包全部没有,而且因为eureka开启了保护模式,没有心跳的服务也未能及时发现。

 

从报错上来看,看起来问题是找不到服务器,而找不到服务器的原因在于MIME was not found,百度了很多,大致提供了两种解决办法

1)需要设置两个属性为false,禁止eureka自我注册,

2)自己替代实现fastjson,解决MIME的问题

但是笔者很不幸的遇到了其他情况,以上两种方法未能解决问题,下面详说

 

2.异常解决:

//最外层异常
Cannot execute request on any known server


//内层异常
com.sun.jersey.api.client.ClientHandlerException: 
   
A message body reader for Java class ****, and Java type ****, 
and MIME media type application/json;charset=UTF-8 was not found


 

通过对eureka-client的源码debug,发现eureka第一次注册的时候,使用的不是put请求,而做心跳包的时候,使用了put请求,每次做心跳检测的时候,返回的状态码都是403,无权限

最终是发现公司为了实现安全指标,在tomcat中配置了只允许get、post请求,而put请求被禁用,从而导致了问题,将put请求放开之后,问题得以解决

 

 

3.总结:

看似轻描淡写,实则踩了很大的坑,网上搜问题千篇一律,运维禁用put这个操作很让人窒息,在一个从不使用put做接口请求的项目,put这个点很难让人想到,另外eureka的报错极具误导性,层层包裹403这个请求码,如果不是debug到jar里面定位到问题,如果不是一个一个看相应body里面层层包裹的属性,呵呵了。。同时另一方面也说明了解源码的重要性,因为你可能百度不到。。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值