sxcooler opened a new issue #2629:
URL: https://github.com/apache/servicecomb-java-chassis/issues/2629


   背景是想要获得一次请求里的所有header参数
   于是尝试使用@RequestHeader Map<String, String> headers
   或者@RequestHeader HttpHeaders headers 
(HttpHeaders本身就是MultiValueMap和Serializable的实现)
   但是得到如标题的报错:not allow complex type for header parameter,部分日志如下
   ```
   2021-10-30 16:00:28,652 |-ERROR[restartedMain] LINE: 771 TraceId:- 
ServiceName:- in org.springframework.boot.SpringApplication : Application 
startup failed
   java.lang.IllegalStateException: ServiceComb init failed.
        at org.apache.servicecomb.core.SCBEngine.init(SCBEngine.java:217)
        at 
org.apache.servicecomb.core.CseApplicationListener.onApplicationEvent(CseApplicationListener.java:81)
        at 
org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
        at 
org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
        at 
org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
        at 
org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:393)
        at 
org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:347)
        at 
org.springframework.boot.context.event.EventPublishingRunListener.finished(EventPublishingRunListener.java:101)
        at 
org.springframework.boot.SpringApplicationRunListeners.callFinishedListener(SpringApplicationRunListeners.java:79)
        at 
org.springframework.boot.SpringApplicationRunListeners.finished(SpringApplicationRunListeners.java:72)
        at 
org.springframework.boot.SpringApplication.run(SpringApplication.java:305)
        at 
org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
        at 
org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
        at com.xxx.xxx.business.Application.main(Application.java:26)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at 
org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
   Caused by: java.lang.Error: generate operation swagger failed, 
com.xxx.xxx.business.api.OrderApiController:confirmOrder
        at 
org.apache.servicecomb.swagger.generator.core.SwaggerGenerator.scanMethods(SwaggerGenerator.java:280)
        at 
org.apache.servicecomb.swagger.generator.core.SwaggerGenerator.generate(SwaggerGenerator.java:140)
        at 
org.apache.servicecomb.core.definition.schema.AbstractSchemaFactory.generateSwagger(AbstractSchemaFactory.java:102)
        at 
org.apache.servicecomb.core.definition.schema.ProducerSchemaFactory.createSchema(ProducerSchemaFactory.java:115)
        at 
org.apache.servicecomb.core.definition.schema.ProducerSchemaFactory.createSchema(ProducerSchemaFactory.java:54)
        at 
org.apache.servicecomb.core.definition.schema.AbstractSchemaFactory.getOrCreateSchema(AbstractSchemaFactory.java:58)
        at 
org.apache.servicecomb.core.definition.schema.ProducerSchemaFactory.getOrCreateProducerSchema(ProducerSchemaFactory.java:76)
        at 
org.apache.servicecomb.provider.rest.common.RestProducerProvider.init(RestProducerProvider.java:45)
        at 
org.apache.servicecomb.core.provider.producer.ProducerProviderManager.init(ProducerProviderManager.java:54)
        at org.apache.servicecomb.core.SCBEngine.doInit(SCBEngine.java:235)
        at org.apache.servicecomb.core.SCBEngine.init(SCBEngine.java:206)
        ... 18 common frames omitted
   Caused by: java.lang.Error: not allow complex type for header parameter, 
method=com.xxx.xxx.business.api.OrderApiController:confirmOrder, paramIdx=1, 
type=org.springframework.http.HttpHeaders
        at 
org.apache.servicecomb.swagger.generator.core.utils.ParamUtils.setParameterType(ParamUtils.java:138)
        at 
org.apache.servicecomb.swagger.generator.core.processor.parameter.AbstractParameterProcessor.setParameterType(AbstractParameterProcessor.java:47)
        at 
org.apache.servicecomb.swagger.generator.core.processor.parameter.AbstractParameterProcessor.fillParameter(AbstractParameterProcessor.java:41)
        at 
org.apache.servicecomb.swagger.generator.springmvc.processor.annotation.RequestHeaderAnnotationProcessor.fillParameter(RequestHeaderAnnotationProcessor.java:46)
        at 
org.apache.servicecomb.swagger.generator.springmvc.processor.annotation.RequestHeaderAnnotationProcessor.fillParameter(RequestHeaderAnnotationProcessor.java:28)
        at 
org.apache.servicecomb.swagger.generator.core.processor.parameter.AbstractParameterProcessor.process(AbstractParameterProcessor.java:33)
        at 
org.apache.servicecomb.swagger.generator.core.OperationGenerator.processByParameterAnnotation(OperationGenerator.java:324)
        at 
org.apache.servicecomb.swagger.generator.core.OperationGenerator.scanMethodParameters(OperationGenerator.java:289)
        at 
org.apache.servicecomb.swagger.generator.core.OperationGenerator.generate(OperationGenerator.java:181)
        at 
org.apache.servicecomb.swagger.generator.core.SwaggerGenerator.scanMethods(SwaggerGenerator.java:276)
        ... 28 common frames omitted
   ```
   
   我搜到一个类似issue: https://github.com/apache/servicecomb-java-chassis/issues/1737
   但是它的解决方法对我不适用。


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to