参数元数据信息可以从方法签名中获取,Invocatioon转换过程中是否可以加入一个尝试转换的逻辑。 也就是调用参数不一致的时候,看看能不能尝试一下自动转换。
Willem Jiang Blog: http://willemjiang.blogspot.com (English) http://jnn.iteye.com (Chinese) Twitter: willemjiang Weibo: 姜宁willem 2018-03-14 10:33 GMT+08:00 bismy <[email protected]>: > 目前在分析如下业务场景。 > 场景1:---------- > Provider:定义一个借口 > @GetMapping > public demo.Foo doSomething(demo.Bar request) > Consumer: 使用RestTemplate调用接口: > restTempalte.getForObject(url, otherDemo.Foo.class) > > > java-chassis要求Foo的package名字完全一样。 > > > 场景2:------------- > 同样是上面的代码。 Spring MVC支持GET的query参数映射到Bar的 属性, java-chassis不支持。 > > > 满足这些场景,需要在解析网络层的数据到Invocaton的时候(args参数),需要知道接口定义的元数据信息( > 比如class类型),而这些在契约里面是不能体现的(因为契约和语言无关) > > > > > 产生这种情况的本质原因是Invocation的args是语言有关的内容。 > > > 建议: > > > Invocation的args做修改,尽可能体现一种契约描述的中立的数据结构,这个数据结构可以使用类似HttpServletRequest > /HttpServletResponse的结构(越贴近契约越好,但要考虑网络层转换和编码层转换的性能)。 > 这样的话网络层到Invocation可以做极小的转换。 > 编码层可以结合代码的元数据和Invocation的的契约元数据将Invocation转换为args。 > > > 由于这个涉及到兼容性问题,针对上面的场景和实现优化, 大家有什么建议?
