5

次の要件を考慮してください。要求パラメーターは、Spring MVC 3.0 を使用してオブジェクトにバインドする必要があります。リクエスト パラメータにはアンダースコアが含まれています (例: http://myurl:80/x?param_one=1&param_two=2)。これらのパラメーターは、次のオブジェクトにバインドする必要があります。

class MyObject {
    private Integer paramOne;
    private Integer paramTwo;

    ...
}

これをどのように行うつもりですか?

重要な注意:このようなパラメーターとオブジェクトが相当量存在する可能性があり、アンダースコアを含むオブジェクトに setter メソッドを定義することは良い習慣とは見なされないことを考慮してください。

4

3 に答える 3

3

Rajithの答えは特にコントローラーメソッドに関するものであり、アンダースコアパラメーターをオブジェクトにバインドする方法を最初に尋ねた質問には対応していません。

私が現在行っているハッキーな解決策は、あなたが実際に求めていることを達成することであり、このスタイルで私のセッターに名前を付けることです:

public void setProject_ids(List<Long> project_ids) {

RequestParam はメソッドに適用できず、このセッターの引数に適用しても効果がないことに注意してください。

于 2015-08-14T21:34:23.843 に答える
1

@RequestMapping属性を使用してこれを行うことができます

@RequestParam(value = "param_One") String paramOne,@RequestParam(value = "param_two") String paramTwo

これをメソッド シグネチャに追加します

ただし、ベスト プラクティスとしては、同じ変数名を渡す方がよい

于 2012-11-07T08:12:30.877 に答える
0

9年後...よりクリーンな解決策は、コンストラクターインジェクションを使用して、それに注釈を付けること@ConstructorPropertiesです。このようにして、クラスを不変に保ち、Java 命名規則を使用できます。

@Value
class MyObject {
  Integer paramOne;
  Integer paramTwo;

  @ConstructorProperties({"param_one", "param_two"})
  MyObject(Integer paramOne, Integer paramTwo) {
    this.paramOne = paramOne;
    this.paramTwo = paramTwo;
  }

フィールドのリストが非常に長い場合でも、コンストラクターを生成でき、アノテーションを記述するだけで済みます。

于 2021-09-29T11:11:24.420 に答える