如果我想將一些 JSON 讀入一個對象,并且我有接口,但必須使用 Spring 上下文來獲取實現(xiàn)類,我需要使用 SimpleAbstractTypeResolver 將接口映射到實現(xiàn)。到目前為止,如果我提前知道哪些接口需要哪些實現(xiàn),那就太好了。但是,如果該接口具有返回其他接口的方法(并且可能遞歸地向下行),并且我不一定提前知道,我想我可以使用反射來弄清楚。所以這就是我想出的,但編譯器不喜歡該行resolver.addMapping(method.getReturnType(), method.getReturnType()); , 說它不適用于這些論點。我很確定這些類型適合該方法——對于如何實現(xiàn)這一點有什么想法嗎? for (Method method : clazz.getMethods()) { if (method.getReturnType().isInterface() && method.getName().startsWith("get")) { // getter method returns an interface so find its implementation class Class beanClass = context.getBean(method.getReturnType()).getClass(); if (clazz.isAssignableFrom(beanClass)) { resolver.addMapping(method.getReturnType(), method.getReturnType()); mapInterfaces(objectMapper, clazz, resolver); } } }
2 回答

一只萌萌小番薯
TA貢獻1795條經驗 獲得超7個贊
可能您需要檢查您的類型。
我的猜測如下:
resolver.addMapping(method.getReturnType(), beanClass);
(將第二個參數(shù)method.getReturnType()替換為beanClass)
或者作為替代方案(代碼對我來說并不完全清楚,抱歉)
resolver.addMapping(clazz, beanClass);
您應該將接口和實現(xiàn)放入 addMapping() 中。
例子:
interface ITest{};
class TestImpl implements ITest {}
usage:
resolver.addMapping(ITest.class, TestImpl.class);

白板的微信
TA貢獻1883條經驗 獲得超3個贊
可能您需要檢查您的類型。
我的猜測如下:
new ObjectMapper().writerFor(<Interface>.class).writeValuesAsArray(<Class>);
添加回答
舉報
0/150
提交
取消