私は私のコントローラでこのメソッドを持っているのヒンティングなし「InterfaceClassのインスタンスを作成することはできません」:克服親
@RequestMapping(method = RequestMethod.POST)
InterfaceClass insert(@RequestBody InterfaceClass interfaceClass) {
// Do something
}
私は取得していますエラーは非常に簡単かつ自明である:
Can not construct instance of InterfaceClass: abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information.
基本的には、具体的な実装がInterfaceClass
、ClassImpl
であることをSpringに伝える必要があります。
私が試した:なし程度の
@JsonRootName("InterfaceClass")
public class ClassImpl implements InterfaceClass {
}
を。私は@JsonTypeInfo
を親インターフェイスクラスとして使用できませんInterfaceClass
はClassImpl
を意識してはならず、別のモジュールにあります。私も試してみました何:
は抽象AbstractClass
とInterfaceClass
を実装して置く:
@JsonDeserialize(as = AbstractClass.class)
をInterfaceClass
の上に。その後、AbstractClass
をClassImpl
に拡張します。また試み
Can not construct instance of InterfaceClass: abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information.
:エラーは、単になる
public class ControllerClass<E extends InterfaceClass> {
@RequestMapping(method = RequestMethod.POST)
InterfaceClass insert(@RequestBody E interfaceClass) {
InterfaceClass object = (InterfaceClass) interfaceClass;
}
}
を、これはもたらす:予想通り
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to InterfaceClass
。
InterfaceClass
またはAbstractClass
の具体的な実装が1つしかないため、クラスパスにClassImpl
という具合に実装されているため、Springブートでコンポーネント検出を処理することが本当に期待されていました。多分私は何か間違っているのでしょうか? InterfaceClass
の実装がどこにあるかを明示的に示唆することなく、これを克服するにはどうすればよいですか(例:@JsonDeserialize
など)?