SpringMVC パス パラメーター インターフェイス java.util.List のプライマリまたは単一の一意のコンストラクターが見つかりませんエラー

パラメーターを渡すバックエンドの MVC 受け入れタイプは List を使用できません。ArrayList に変更する必要があります。

1: このエラーは通常、Jackson ライブラリを使用して JSON オブジェクトを逆シリアル化するときに発生します。「jackson-databind」と呼ばれる Jackson ライブラリは、JSON 形式のデータを操作するための Java ライブラリです。JSON 文字列を Java オブジェクトに変換したり、Java オブジェクトを JSON 文字列に変換したりできます。

JSON を逆シリアル化するとき、Jackson はデフォルトのコンストラクターに従ってオブジェクト インスタンスを作成し、セッター メソッドを使用してプロパティを設定する必要があります。ただし、List はインターフェイスであるため、デフォルトの引数なしのコンストラクターがないため、このエラーが発生します。

この問題を解決するには 2 つの方法があります。

List インターフェイスを実装し、引数なしのコンストラクターと必要なすべてのセッター メソッドを提供する具象クラスを作成します。例えば:

public class MyList<T> implements List<T> {
    
    
    private List<T> list = new ArrayList<>();
    
    public MyList() {
    
    
        // 无参构造函数
    }
    
    // 所有的必须 setter 方法
    @Override
    public int size() {
    
    
        return list.size();
    }
    
    // 省略其他方法
}

2: Jackson が提供するアノテーションを使用して、List の実装クラスをマークします。たとえば、 @JsonDeserialize(using = ArrayListDeserializer.class) アノテーションを List 型のプロパティに追加します。

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.deser.std.ArrayListDeserializer;

public class MyClass {
    
    
    @JsonDeserialize(using = ArrayListDeserializer.class)
    private List<Integer> myList;
    
    // 省略其他属性和方法
}

このようにして、Jackson は逆シリアル化時に ArrayList クラスを使用して List インターフェイスを実装し、JSON データを通常どおりに読み取ります。

Guess you like

Origin blog.csdn.net/qq_19891197/article/details/131293522