次のシナリオを処理するためのベスト プラクティスに関するアドバイスを探しています。
JSON 要求を受け入れる Java ベースの Web API がある場合、JSON オブジェクトを Java にマップする必要があります。この質問は、Java オブジェクトがパラメトリック型である場合に関するものです。私の特定のケースでは、Spring と MappingJacksonHttpMessageConverter を使用してマッピングを行っています。
REST サービスの例
@RequestMapping(method = RequestMethod.POST)
public void updateContainer(@RequestBody Container<?> container) {
realService.updateContainer(container);
}
パラメトリック タイプの例
public class Container<T extends ContainerItem> {
private T containerItem;
...
}
このメソッドを呼び出すと、実行時に Container のタイプが消去され、Jackson が containerItem をマップする方法がわからないため (どのタイプにマップするかわからないため)、400 エラー (不正な要求) が発生します。
非常に基本的なソリューションが実装されています。このソリューションでは、containerItem の Java クラス名を指定する JSON データにフィールドを追加し、このクラス名を使用して、Jackson ObjectMapper が使用できるパラメトリック JavaType を構築するカスタム HttpMessageConverter を追加しました。マッピングですが、これを処理するより良い方法があるかどうか疑問に思っていますか?