是由于:openfeign调用接口中与被调用方接口返回类型不一致导致的。
出现这种情况,非常大的可能是因为服务真实返回的对象数据结构和你实际接受的对象数据结构不一致。
举个例子,你的feign里面的方法是这样的:
UserInfoDetailVO obtain(@PathVariable("id") Serializable id);
但是服务实际的借口声明不是这样的,比如:
public ApiResult<UserInfoDetailVO> obtain(@PathVariable("id") Serializable id)
因为真实的服务不管有没有对象,都会返回数据,一个基础的数据包,但是里面没有实际想要的业务数据,因为总体返回数据不为null,框架去获取数据包里面能和feign方法声明的对象属性,没有获取到,属性就是null,但是结果对象是有的,所以造成了一个对象不为null,但是里面属性都是null的现象。
有的时候虽然: openfeign调用接口中与被调用方接口返回类型一致,但是那是出现了这个问题,那就是由于全局异常处理导致的返回类型转换了而导致的。
@ExceptionHandler(Exception.class)
public WResult handleException(Exception e) {
log.error(e.getMessage(), e);
return WResult.newInstance().msg(e.getMessage());
}
比如上面的obtain方法抛出Exception异常后,返回类型变成了WResult,所以推荐所有方法都用WResult来包装。