servicecomb-java-chassis
servicecomb-java-chassis copied to clipboard
CSE中使用@JsonProperty不生效
框架版本: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" }]
能基于 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 有个测试用例, 看起来是可以的。
已根据描述做出相应场景demo,结论是Servicecomb可以使用@JsonProperty,经过走读源码发现,该注解是直接作用在类的属性上,可以根据这一点来排查一下是否在业务中用了中间容器处理。走读源码可以在java.lang.reflect类中public Annotation[] getDeclaredAnnotations()方法中打上断点调试。
据说是jackson版本导致的问题,业务引入的三方件不兼容。
servicecomb2.6.0已经引入jackson2.12.1不需要引入第三方了,而且如果再引入第三方应该会报错导致程序启动失败
这个问题的原因是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.
这个问题的原因是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的配套版本。