一、该问题的重现步骤是什么?
1. biz层启动服务后报错
2.
2022-04-04 00:15:14.591 INFO 1 --- [ main] d.s.w.p.DocumentationPluginsBootstrapper : Documentation plugins bootstrapped
2022-04-04 00:15:14.598 INFO 1 --- [ main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
2022-04-04 00:15:14.611 INFO 1 --- [ async-task-1] o.s.core.launch.StartEventListener : ---[SMART-APPLET]---启动完成,当前使用的端口:[8207],环境变量:[dev]---
2022-04-04 00:15:14.706 INFO 1 --- [ main] s.d.s.w.s.ApiListingReferenceScanner : Scanning for api listing references
2022-04-04 00:15:15.094 INFO 1 --- [ main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: infoUsingGET_1
2022-04-04 00:15:15.263 INFO 1 --- [ main] o.s.smart.applet.Appletlication : Started Appletlication in 23.107 seconds (JVM running for 24.315)
2022-04-04 00:15:25.351 INFO 1 --- [ XNIO-1 task-1] io.undertow.servlet : Initializing Spring DispatcherServlet 'dispatcherServlet'
2022-04-04 00:15:25.351 INFO 1 --- [ XNIO-1 task-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2022-04-04 00:15:25.376 INFO 1 --- [ XNIO-1 task-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 25 ms
2022-04-04 00:15:25.907 ERROR 1 --- [ XNIO-1 task-1] o.s.c.l.e.BladeRestExceptionTranslator : 服务器异常
org.springframework.http.converter.HttpMessageNotWritableException: No converter for [class org.springframework.boot.actuate.health.SystemHealth] with preset Content-Type 'null'
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:299)
at org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor.handleReturnValue(HttpEntityMethodProcessor.java:219)
at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:82)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:123)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:497)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:584)
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
at org.springblade.core.log.filter.LogTraceFilter.doFilter(LogTraceFilter.java:39)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
3.
二、你期待的结果是什么?实际看到的又是什么?
正常启动
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
BladeX 2.9.1 centos7
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
以下答案为我仅仅是根据源码和找资料分析得出,没有经过测试,不保证是正确的
错误原因:不支持的MediaTypes,应该是actuate心跳检测的请求有未知的媒体类型(什么是为媒体类型?看我截图)
为啥会出现不支持的媒体类型呢?
我看了异常所指出的健康检查的类,发现有个apiVersion
根据这个apiversion可以看出是actuate自己定义了2个媒体类型
所以在启动时候进行心跳检测的时候无法匹配到正确的媒体类型所抛出的消息转换异常、
该异常无法找到对应的转换器
解决办法:所以直接给AbstractJackson2HttpMessageConverter添加对应媒体类型的转换器就行了
看了bladex的配置,这里给以下媒体类型添加了对应的媒体类型, supportedMediaTypes.add(MediaType.APPLICATION_JSON); supportedMediaTypes.add(new MediaType("application", "*+json")); // 支持 text 文本,用于报文签名 if (Boolean.TRUE.equals(properties.getSupportTextPlain())) { supportedMediaTypes.add(MediaType.TEXT_PLAIN); }
所以我觉得在MappingApiJackson2HttpMessageConverter类添加以下代码可以解决问题
supportedMediaTypes.add(MediaType.ALL);
如果解决了你的问题 给我点个解决就行 因为这样会让我比较有动力和大家一起学习进步鸭!
扫一扫访问 Blade技术社区 移动端