1

私たちのアプリは、Spring の Converter インターフェースを使用して特定のクラスのリストに変換したいコントローラー メソッドで JSON ベースの文字列を受け入れます。

文字列は、さまざまな時点で送信される追加のパラメーターを含む、より大きなフォーム送信の一部です。

残念ながら、Spring はこのコンバーター ( として宣言<String, List<Proprietary>>) を取得し、それを使用してすべての文字列をリストに変換しているように見えますが、これは望ましいことではありません。

Spring MVC が提供する変換サービスを使用してこれを回避する方法はありますか? コントローラー メソッドで文字列を受け取り、直接変換を実行することでこの問題を回避しましたが、これはそれほどクリーンではありません。

4

1 に答える 1

2

私が推奨できる回避策の 1 つは、独自の HandlerMethodArgumentResolver を作成し、このHandlerMethodArgumentResolver をトリガーして特定の引数に対して実行することです。たとえば、JsonArgument というアノテーションを作成し、これらの引数に @JsonArgument のアノテーションを付けます。

    @Override
    public boolean supportsParameter(MethodParameter methodParameter) {
        if (methodParameter.getParameterAnnotation(JsonArgument.class)!=null) return true;

これで、この HandlerMethodArgumentResolver で、特定のリクエスト パラメータ値 (Json 文字列など) を取得して、必要な型に変換できます。

@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mav, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
...
       jsonString = webRequest.getParameter(parameterName);
       Class<?> type = methodParameter.getParameterType();
       //Convert jsonString to object of appropriate type..

このようにして、注釈を付けたタイプのみに変更が集中します。

于 2012-07-10T16:34:58.067 に答える