CSE的REST接口存在重载的时候报错: OperationId must be unique

在使用ServiceComb(CSE)开发微服务时遇到OperationId必须唯一和path重复的错误。错误源于接口定义不明确,导致ServiceComb初始化失败。解决方法是在每个接口上指定唯一的operationId和不同的path,通过@ApiOperation和@GetMapping等注解确保接口的唯一性。

Exception in thread "main" java.lang.IllegalStateException: ServiceComb init failed.

at org.apache.servicecomb.core.SCBEngine.init(SCBEngine.java:220)

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.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:883)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546)

at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)

at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)

at org.apache.servicecomb.foundation.common.utils.BeanUtils.init(BeanUtils.java:49)

at org.apache.servicecomb.foundation.common.utils.BeanUtils.init(BeanUtils.java:42)

at com.icss.newretail.goods.GoodsMain.main(GoodsMain.java:7)

Caused by: java.lang.Error: OperationId must be unique. com.icss.newretail.api.goods.StockApi:queryGoodsStockByOrg

at org.apache.servicecomb.swagger.generator.core.SwaggerGenerator.scanMethods(SwaggerGenerator.java:281)

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:51)

at org.apache.servicecomb.core.SCBEngine.doInit(SCBEngine.java:238)

at org.apache.servicecomb.core.SCBEngine.init(SCBEngine.java:209)

... 13 more

 

或者报告path重复

 

Exception in thread "main" java.lang.IllegalStateException: ServiceComb init failed.

at org.apache.servicecomb.core.SCBEngine.init(SCBEngine.java:220)

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.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:883)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546)

at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)

at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)

at org.apache.servicecomb.foundation.common.utils.BeanUtils.init(BeanUtils.java:49)

at org.apache.servicecomb.foundation.common.utils.BeanUtils.init(BeanUtils.java:42)

at com.icss.newretail.goods.GoodsMain.main(GoodsMain.java:7)

Caused by: java.lang.Error: Only allowed one default path. com.icss.newretail.api.goods.StockApi:queryGoodsStockByOrg

at org.apache.servicecomb.swagger.generator.core.OperationGenerator.addOperationToSwagger(OperationGenerator.java:424)

at org.apache.servicecomb.swagger.generator.core.SwaggerGenerator.addOperationsToSwagger(SwaggerGenerator.java:289)

at org.apache.servicecomb.swagger.generator.core.SwaggerGenerator.generate(SwaggerGenerator.java:141)

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:51)

at org.apache.servicecomb.core.SCBEngine.doInit(SCBEngine.java:238)

at org.apache.servicecomb.core.SCBEngine.init(SCBEngine.java:209)

... 13 more

 

解决办法:给每个接口制定唯一的operationId和path

1

2

3

4

5

6

7

8

9

10

11

  @GetMapping(path = "queryGoodsStockByOrgAndGoodsId")

  @ApiOperation(nickname = "queryGoodsStockByOrgAndGoodsId", value = "")

  public GoodsStockDTO queryGoodsStockByOrg(@RequestParam(name = "orgId") String orgId,

      @RequestParam(name = "goodsId") String goodsId) {

    return stockService.queryGoodsStockByOrg(orgId, goodsId);

  }

 

  @GetMapping(path = "queryGoodsStockByOrg")

  public List<GoodsStockDTO> queryGoodsStockByOrg(@RequestParam(name = "orgId") String orgId) {

    return stockService.queryGoodsStockByOrg(orgId);

  }

 

其中ApiOperation指定了唯一ID,GetMapping指定了不同的路径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值