Mam zasób, który obsługuje zarówno żądania GET
i POST
. Oto przykładowy kod dla zasobu próbki:Łączenie metod żądania GET i POST na wiosnę
@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
}
Kod w obu metod jest praktycznie taka sama, z wyjątkiem powiedzmy zmiennej definicji. Te dwie metody można z łatwością łączyć, używając method = {RequestMethod.POST, RequestMethod.GET}
i prostego if
w środku. Próbowałem, ale to nie działa, ponieważ te dwie metody mają inny parametr na końcu, tj. HttpServletRequest
i BindingResult
(@RequestParam
's nie są wymagane i dlatego nie są potrzebne w żądaniu POST
). Jakieś pomysły, jak połączyć te dwie metody?
Dlaczego nie przestawiasz LONG CODE na osobną metodę? –
A jeśli jest tak długo, powinieneś podzielić go na kilka krótkich metod. –
Bo szukam bardziej eleganckiego i ogólnego rozwiązania. Nie sądzę, że dobrze jest mieć metodę "booksLogic", która jest jedyną rzeczą, którą nazywam dwiema metodami. –