おそらく、Spring自体がこの質問にとって必ずしも重要ではないことを指摘する必要がありますが、Springを使用しているときにこの動作に遭遇したため、この質問では、Springでこれに遭遇した状況を使用します。
特定のフォームの同じURLセットに対するリクエストGET
とリクエストをマップするコントローラークラスがあります。POST
このフォームのURLはロケールごとに異なりますが、フォームのコントローラーレベルのロジックはロケールサイトごとに同じであるため、GET
リクエストのメソッドは1つ、のメソッドは1つだけです(ただし、ロケールなど、ロジックのより深い部分) POST
-特定の検証、異なる場合があります)。例:
@Controller
public class MyFormController {
// GET request
@RequestMapping(value={"/us-form.html", "/de-form.html", "/fr-form.html"},
method={RequestMethod.GET})
public String showMyForm() {
// Do some stuff like adding values to the model
return "my-form-view";
}
// POST request
@RequestMapping(value={"/us-form.html", "/de-form.html", "/fr-form.html"},
method={RequestMethod.POST})
public String submitMyForm() {
// Do stuff like validation and error marking in the model
return "my-form-view"; // Same as GET
}
}
このように書くと、フォームGET
と動作は問題なく動作します。値に使用される配列が同一でPOST
あることに気付くでしょう。私がやりたいのは、それらのURLを1つの場所(理想的にはコントローラーのフィールド)に配置して、新しいURL(将来のローカライズされたサイトのフォームに対応)を追加するときに、それらを1つの場所に追加できるようにすることです。だから私はコントローラーにこの変更を試みました:String
@RequestMapping
static final
@Controller
public class MyFormController {
// Moved URLs up here, with references in @RequestMappings
private static final String[] MY_URLS =
{"/us-form.html", "/de-form.html", "/fr-form.html"};
// GET request
@RequestMapping(value=MY_URLS, // <-- considered non-constant
method={RequestMethod.GET})
public String showMyForm() {
// Do some stuff like adding values to the model
return "my-form-view";
}
// POST request
@RequestMapping(value=MY_URLS, // <-- considered non-constant
method={RequestMethod.POST})
public String submitMyForm() {
// Do stuff like validation and error marking in the model
return "my-form-view"; // Same as GET
}
}
ここでの問題は、コンパイラがvalue
属性が定数ではなくなったことについて文句を言うことです。Springではvalue
定数でなければならないことは承知していますが、リテラルを含むリテラルでfinal
フィールド(またはstatic final
私の場合)を使用すると、 「定数」として渡されると思いました。ここでの私の疑いは、属性が解析されるときに初期化されないように、配列リテラルをその場で構築する必要があるということです。Array
String
value
これはJavaの基本的な知識で理解するのは難しいことではないように感じますが、いくつかの調査の結果、答えを見つけることができなかったという何かが私を逃れています。誰かが私の疑惑を確認し、それがなぜそうなるのかについての引用または良い説明を与えることができますか、または私の疑惑を否定して実際の問題が何であるかを説明できますか?
注:各フォームURLはローカライズされたサイトの言語であるため、URLをパスパターンに単純に組み合わせることができず、それに一致することは不可能です。たとえば、上記の「/{locale}-form.html」文字列をURLとして指定するだけです。