GET
要求とPOST
要求の両方をサポートするリソースがあります。サンプルリソースのサンプルコードは次のとおりです。
@RequestMapping(value = "/books", method = RequestMethod.GET)
public ModelAndView listBooks(@ModelAttribute("booksFilter") BooksFilter filter, two @RequestParam parameters, HttpServletRequest request)
throws ParseException {
LONG CODE
}
@RequestMapping(value = "/books", method = RequestMethod.POST)
public ModelAndView listBooksPOST(@ModelAttribute("booksFilter") BooksFilter filter, BindingResult result)
throws ParseException {
SAME LONG CODE with a minor difference
}
2つのメソッドのコードは、変数定義を言うことを除いて、実質的に同じです。 2つのメソッドは、method = {RequestMethod.POST, RequestMethod.GET}
と内部の簡単なif
を使用して簡単に組み合わせることができます。試してみましたが、2つのメソッドの最後に異なるパラメーターがあります。つまり、HttpServletRequest
とBindingResult
(@RequestParam
は不要です。したがって、 POST
リクエスト)。 2つの方法を組み合わせる方法はありますか?
@RequestMapping(value = "/testonly", method = { RequestMethod.GET, RequestMethod.POST })
public ModelAndView listBooksPOST(@ModelAttribute("booksFilter") BooksFilter filter,
@RequestParam(required = false) String parameter1,
@RequestParam(required = false) String parameter2,
BindingResult result, HttpServletRequest request)
throws ParseException {
LONG CODE and SAME LONG CODE with a minor difference
}
@RequestParam(required = true)
の場合、parameter1、parameter2を渡す必要があります
BindingResultを使用して、条件に基づいて要求します。
その他の方法
@RequestMapping(value = "/books", method = RequestMethod.GET)
public ModelAndView listBooks(@ModelAttribute("booksFilter") BooksFilter filter,
two @RequestParam parameters, HttpServletRequest request) throws ParseException {
myMethod();
}
@RequestMapping(value = "/books", method = RequestMethod.POST)
public ModelAndView listBooksPOST(@ModelAttribute("booksFilter") BooksFilter filter,
BindingResult result) throws ParseException {
myMethod();
do here your minor difference
}
private returntype myMethod(){
LONG CODE
}
以下は、それを達成する方法の1つであり、理想的な方法ではない場合があります。
両方のタイプのリクエストを受け入れる1つのメソッドを用意し、受け取ったリクエストのタイプを確認します。タイプが「GET」または「POST」であることがわかったら、それぞれのアクションを実行し、共通のタスクを実行する1つのメソッドを呼び出します両方のリクエストメソッド、すなわちGETとPOST。
@RequestMapping(value = "/books")
public ModelAndView listBooks(HttpServletRequest request){
//handle both get and post request here
// first check request type and do respective actions needed for get and post.
if(GET REQUEST){
//WORK RELATED TO GET
}else if(POST REQUEST){
//WORK RELATED TO POST
}
commonMethod(param1, param2....);
}
@RequestMapping(value = "/books", method = { RequestMethod.GET,
RequestMethod.POST })
public ModelAndView listBooks(@ModelAttribute("booksFilter") BooksFilter filter,
HttpServletRequest request)
throws ParseException {
//your code
}
これは、GETとPOSTの両方で機能します。
GETの場合、pojo(BooksFilter)にリクエストパラメーターで使用している属性を含める必要がある場合
以下のような
public class BooksFilter{
private String parameter1;
private String parameter2;
//getters and setters
URlは次のようになります
/ books?parameter1 = blah
このように、GETとPOSTの両方に使用できます