启动服务报错 No converter with preset Content-Type 'null'

Blade 已结 1 1749

一、该问题的重现步骤是什么?

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

四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

1条回答
  •  yinyuncan
    yinyuncan (最佳回答者)
    2022-04-04 22:53

    以下答案为我仅仅是根据源码和找资料分析得出,没有经过测试,不保证是正确的


    错误原因:不支持的MediaTypes,应该是actuate心跳检测的请求有未知的媒体类型(什么是为媒体类型?看我截图)


    image.png

    为啥会出现不支持的媒体类型呢?

    我看了异常所指出的健康检查的类,发现有个apiVersion 

    image.png

    image.png

    根据这个apiversion可以看出是actuate自己定义了2个媒体类型


    所以在启动时候进行心跳检测的时候无法匹配到正确的媒体类型所抛出的消息转换异常、


    该异常无法找到对应的转换器

    image.png



    解决办法:所以直接给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);


    image.png


    如果解决了你的问题 给我点个解决就行 因为这样会让我比较有动力和大家一起学习进步鸭!

    1 讨论(1)
提交回复