servicecomb-java-chassis
servicecomb-java-chassis copied to clipboard
生成的服务契约和代码接口不一致
框架版本: java-chassis-bom 2.7.6
问题: 在接口中定义的请求参数类里,如果含有两个类名相同,但是类路径不一样的字段,生成的服务契约,和实际代码不一致。
接口定义:
@RestSchema(schemaId = "Provider")
@RequestMapping(path = "/", produces = MediaType.APPLICATION_JSON)
public class ProviderController implements ProviderApi {
@Override
@RequestMapping(value = "call", method = RequestMethod.POST)
public ProviderRsp call(@RequestBody ProviderReq providerReq) {
return new ProviderRsp();
}
}
请求类:
public class ProviderReq {
private List<InnerClass> innerClassList;
private String baseField;
private Context context;
public String getBaseField() {
return baseField;
}
public void setBaseField(String baseField) {
this.baseField = baseField;
}
public List<InnerClass> getInnerClassList() {
return innerClassList;
}
public void setInnerClassList(List<InnerClass> innerClassList) {
this.innerClassList = innerClassList;
}
public Context getContext() {
return context;
}
public void setContext(Context context) {
this.context = context;
}
}
innerClassList 中的InnerClass路径为com.xx.zy.provider.model.InnerClass,包含field3和field4两个字段
Context中也有一个List<InnerClass>, 字段名是innerClass,类路径com.xx.zy.provider.model.inner.InnerClass,包含field1和field2两个字段
public class Context {
private List<InnerClass> innerClass;
public List<InnerClass> getInnerClass() {
return innerClass;
}
public void setInnerClass(List<InnerClass> innerClass) {
this.innerClass = innerClass;
}
}
从看板上发现,生成的服务契约里面,只有一个InnerClass的定义(应该有两个),导致innerClass和innerClassList均指向了同一个InnerClass,和接口定义不符。目前尚未发现对功能有影响,但是这种情况下,如何获取接口服务契约?
这种类名重复的情况会有问题,避免在一个 RestSchema
里面存在重复的model类名(package 不同, 类名一样)。
那请问我还有什么办法能够获取服务的接口契约么
那请问我还有什么办法能够获取服务的接口契约么
你的意思是再消费端代码层面获取服务端的接口契约信息?
那请问我还有什么办法能够获取服务的接口契约么
你的意思是再消费端代码层面获取服务端的接口契约信息?
不一定是在消费端,就是能够获取到正确的接口契约(yml格式)就行
不一定是在消费端,就是能够获取到正确的接口契约(yml格式)就行 注册中心有获取契约的接口吧,直接从接口拿呗
可以看下 ServiceRegistryClient
, 会使用一些实现层面的API。 或者
Swagger swagger = scbEngine.getSwaggerLoader().loadLocalSwagger(
producerMicroserviceMeta.getAppId(),
producerMicroserviceMeta.getShortName(),
schemaId);