OpenAPI生成API在K8s中PUT请求失败,报GenericSignatureFormatError
问题描述
我在Spring WebFlux 5.x服务器上运行由OpenAPI 7.0.0生成的控制器和模型。本地运行一切正常,但部署到Kubernetes Pod后,所有PUT请求均失败,GET/DELETE请求可正常执行。GET请求返回一个复杂对象,PUT请求也使用该对象,怀疑问题与@RequestBody注解有关。
错误堆栈跟踪
Caused by: java.lang.reflect.GenericSignatureFormatError: Signature Parse error: expected a class type Remaining input: java/lang/Object at java.base/sun.reflect.generics.parser.SignatureParser.error(Unknown Source) at java.base/sun.reflect.generics.parser.SignatureParser.parseClassTypeSignature(Unknown Source) at java.base/sun.reflect.generics.parser.SignatureParser.parseClassSignature(Unknown Source) at java.base/sun.reflect.generics.parser.SignatureParser.parseClassSig(Unknown Source) at java.base/sun.reflect.generics.repository.ClassRepository.parse(Unknown Source) at java.base/sun.reflect.generics.repository.ClassRepository.parse(Unknown Source) at java.base/sun.reflect.generics.repository.AbstractRepository.<init>(Unknown Source) at java.base/sun.reflect.generics.repository.GenericDeclRepository.<init>(Unknown Source) at java.base/sun.reflect.generics.repository.ClassRepository.<init>(Unknown Source) at java.base/sun.reflect.generics.repository.ClassRepository.make(Unknown Source) at java.base/java.lang.Class.getGenericInfo(Unknown Source) at java.base/java.lang.Class.getTypeParameters(Unknown Source) at java.base/sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(Unknown Source) at java.base/sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(Unknown Source) at java.base/sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(Unknown Source) at java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(Unknown Source) at java.base/sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Unknown Source) at java.base/sun.reflect.generics.tree.ClassTypeSignature.accept(Unknown Source) at java.base/sun.reflect.generics.repository.MethodRepository.computeReturnType(Unknown Source) at java.base/sun.reflect.generics.repository.MethodRepository.getReturnType(Unknown Source) at java.base/java.lang.reflect.Method.getGenericReturnType(Unknown Source) at org.hibernate.validator.internal.properties.javabean.JavaBeanMethod.<init>(JavaBeanMethod.java:20) at org.hibernate.validator.internal.properties.javabean.JavaBeanHelper.executable(JavaBeanHelper.java:132) at org.hibernate.validator.internal.properties.javabean.JavaBeanHelper.executable(JavaBeanHelper.java:120) at org.hibernate.validator.internal.properties.javabean.JavaBeanHelper.executable(JavaBeanHelper.java:112) at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.findExecutableMetaData(AnnotationMetaDataProvider.java:307) at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.getMetaData(AnnotationMetaDataProvider.java:292) at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.getMethodMetaData(AnnotationMetaDataProvider.java:279) at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.retrieveBeanConfiguration(AnnotationMetaDataProvider.java:130) at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.getBeanConfiguration(AnnotationMetaDataProvider.java:120) at org.hibernate.validator.internal.metadata.BeanMetaDataManagerImpl.getBeanConfigurationForHierarchy(BeanMetaDataManagerImpl.java:234) at org.hibernate.validator.internal.metadata.BeanMetaDataManagerImpl.createBeanMetaData(BeanMetaDataManagerImpl.java:201) at org.hibernate.validator.internal.metadata.BeanMetaDataManagerImpl.getBeanMetaData(BeanMetaDataManagerImpl.java:165) at org.hibernate.validator.internal.engine.ValidatorImpl.buildNewLocalExecutionContext(ValidatorImpl.java:772) at org.hibernate.validator.internal.engine.ValidatorImpl.validateCascadedAnnotatedObjectForCurrentGroup(ValidatorImpl.java:627) at org.hibernate.validator.internal.engine.ValidatorImpl.validateCascadedConstraints(ValidatorImpl.java:590) at org.hibernate.validator.internal.engine.ValidatorImpl.validateParametersInContext(ValidatorImpl.java:880) at org.hibernate.validator.internal.engine.ValidatorImpl.validateParameters(ValidatorImpl.java:283) at org.hibernate.validator.internal.engine.ValidatorImpl.validateParameters(ValidatorImpl.java:235) at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:110) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)
已尝试的操作
- 使用过OpenAPI版本6.3.0和7.0.0;
- 直接在K8s Pod中触发PUT请求,复现了相同问题,确认该问题与LB/proxy无关;
- 将Pod上的JAR包下载到本地环境,使用完全相同的JVM参数和JDK版本(JDK 17.0.4.1)运行,本地调用PUT请求成功。
内容的提问来源于stack exchange,提问作者James Miao
相关产品推荐
相关产品推荐

