servicecomb-java-chassis icon indicating copy to clipboard operation
servicecomb-java-chassis copied to clipboard

CSE中使用@JsonProperty不生效

Open youxiaoyouhaha opened this issue 3 years ago • 6 comments

框架版本:nuwa+cse 依赖的cse版本是1.3.2 如果在返回的实体类中加上@JsonProperty注解,则不会生效,求原因

例如: @Valid @JsonProperty("OperationDetailList") @NoFuzzy private List<OperationDetail> operationDetailList = new ArrayList<OperationDetail>(); 返回: "operationDetailList": [ { "changeItem": "t_targeting.targeting_id", "before": "", "after": "65261562" }]

youxiaoyouhaha avatar Jan 17 '22 12:01 youxiaoyouhaha

能基于 https://github.com/apache/servicecomb-samples/tree/master/java-chassis-samples 提供一个例子吗?

https://github.com/apache/servicecomb-java-chassis/blob/master/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/model/SpecialNameModel.java 有个测试用例, 看起来是可以的。

liubao68 avatar Jan 18 '22 07:01 liubao68

已根据描述做出相应场景demo,结论是Servicecomb可以使用@JsonProperty,经过走读源码发现,该注解是直接作用在类的属性上,可以根据这一点来排查一下是否在业务中用了中间容器处理。走读源码可以在java.lang.reflect类中public Annotation[] getDeclaredAnnotations()方法中打上断点调试。

lbc97 avatar Jan 24 '22 08:01 lbc97

据说是jackson版本导致的问题,业务引入的三方件不兼容。

liubao68 avatar Jan 24 '22 13:01 liubao68

servicecomb2.6.0已经引入jackson2.12.1不需要引入第三方了,而且如果再引入第三方应该会报错导致程序启动失败

lbc97 avatar Jan 25 '22 01:01 lbc97

这个问题的原因是swagger的版本问题,我们用的servicecomb版本是1.3.2里面引用的swagger版本是1.5.22,解决方法是:排除CSE自身依赖的swagger,单独进行引用swagger1.6.2版本,并进行指明:nuwa.system.classloader.usebiz.nuwa-cse-foundation=com.fasterxml.jackson.,io.swagger.jackson.

youxiaoyouhaha avatar Jan 25 '22 01:01 youxiaoyouhaha

这个问题的原因是swagger的版本问题,我们用的servicecomb版本是1.3.2里面引用的swagger版本是1.5.22,解决方法是:排除CSE自身依赖的swagger,单独进行引用swagger1.6.2版本,并进行指明:nuwa.system.classloader.usebiz.nuwa-cse-foundation=com.fasterxml.jackson.,io.swagger.jackson.

我记得之前升级jackson版本时,就遇到预先升级swagger。新版本的swagger的ID已经变更了。业务自行升级jackson,就需要考虑swagger的配套版本。

develpoerX avatar Feb 07 '22 01:02 develpoerX