2012-08-05 14 views
6

Wiosną MVC (pracuję z 3.0.2), dwie metody HTTP są zawsze (lub głównie jako wydaje mi) zarezerwowane (tj odwzorowane w odpowiednie koparki), które są GET and POST takich jakJak radzisz sobie z żądaniami Ajax w Spring MVC?

@RequestMapping(method=RequestMethod.GET) 
public String showForm(Map model) 
{ 
    //Usually retrieve data from the database when the page is loaded. 

    return "admin_side/Temp"; 
} 

Powyższa metoda jest wywoływana po otrzymaniu żądania GET.


@RequestMapping(method=RequestMethod.POST) 
public String onSubmit(@ModelAttribute("tempBean") @Valid TempBean tempBean, BindingResult error, Map model, HttpServletRequest request, HttpServletResponse response) 
{ 
    //Perform some basic operations with the database like insert, update or delete when the form is submitted (by clicking a submit button or so). 

    return "admin_side/Temp"; 
} 

Powyższa metoda jest wywoływana, gdy żądanie POST jest wykonany. Zakładając, że kontroler Spring jest oznaczony adnotacją @RequestMapping(value="admin_side/Temp").


Co się stanie, jeśli będę potrzebować Ajaxa i muszę wykonać inną funkcjonalność niż poprzednie metody? Nie mogę obsłużyć innej metody za pomocą metody GET ani metody POST, ponieważ są już zamapowane procedury obsługi (obie metody HTTP, GET i POST są zarezerwowane do obsługi metod odpowiednio showForm() i onSubmit()).

Dla demonstracji, użyłem podejście method=RequestMethod.PUTz Ajax takich jak

@RequestMapping(method=RequestMethod.PUT) 
public @ResponseBody String getStateList(@ModelAttribute("tempBean") @Valid TempBean tempBean, BindingResult error, HttpServletRequest request, HttpServletResponse response) 
{ 
    return "Message"; 
} 

i działał zgodnie z przeznaczeniem, ale czułem powinno nie być najlepszym rozwiązaniem. Jak radzisz sobie z wnioskami Ajaxa w Spring MVC, jeśli masz taki scenariusz (właściwie wydaje mi się to dość normalne)? Czy powinienem (zawsze) używać RequestMethod.PUT? (lub jaka jest najlepsza metoda HTTP dla Ajax na wiosnę?)

Czy istnieje sposób mapowania więcej niż jednej metody z tą samą metodą HTTP w tym samym kontrolerze (oczywistą odpowiedzią powinno być no)? Znowu, z którego podejścia korzystasz, gdy chcesz pracować z Ajaxem w Spring MVC? Mam nadzieję, że podążysz za tym co mam na myśli! Trudno mi to wyrazić, ponieważ mój angielski jest na początkowym etapie.

Odpowiedz

1

Nie ma czegoś takiego jak najlepsza metoda dla AJAX.

Co do metod, z których należy korzystać, zależy to od stylu architektonicznego. Paradygmat REST i jego najczęstsza praktyczna interpretacja, ROA (ang. Resource Oriented Architecture), mają pewne założenia co do semantyki metod HTTP. Jest to coraz bardziej popularne podejście i myślę, że warto o nim przeczytać. Pełne wykorzystanie zalet REST prawdopodobnie wymagałoby ponownego przemyślenia całego projektu aplikacji. Jeśli zdecydujesz się to zrobić w ten sposób, przeczytaj REST, ROA i JAX-RS, standard Java dla aplikacji RESTful. Jego implementacje można zintegrować ze sprężyną.

Alternatywnie można po prostu trzymać się GET i POST, jako najczęściej obsługiwanych metod. Jeśli chodzi o Spring, rozsądnym sposobem na to byłoby dostarczenie osobnego komponentu bean (lub zestawu ziaren), aby dbać o interfejs API oparty na technologii AJAX. Nie będzie metody "konfliktu", jeśli adresy URL będą inne.

+0

Dzięki! Zrób to, używając innego adresu URL. Teraz muszę pobrać dane z kontrolera Spring za pomocą Ajax (zazwyczaj "Lista "). Nie wiem o tym teraz, ale Spring MVC 3.0.2 powinien obsługiwać niektóre mechanizmy, takie jak JSON. Wiesz o tym? Mam na myśli, czy masz jakieś linki, jeśli używałeś takich rzeczy w Spring MVC? Możesz odrzucić moją prośbę, ponieważ nie jest to oryginalne pytanie. Dziękuję Ci. – Tiny

+0

@ Tiny Oto przykład użycia biblioteki Jacksona: http://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/ – toniedzwiedz

2

Myślę, że prawdziwe pytanie brzmi:

Dlaczego chcesz to samo połączenie URL/metoda działania różnią się w zależności od tego, jak jest ona dostępna?

Kogo to obchodzi, jeśli uzyskujesz do niego dostęp, wysyłając żądanie AJAX na interfejsie? Jeśli semantyka połączenia jest inna, podaj inny adres URL. Możesz określić wzorzec adresu URL bezpośrednio w metodzie, a nie w klasie, aby uniknąć konieczności duplikowania funkcji tej klasy.

+0

Dzięki! Zrób to, używając innego adresu URL. Teraz muszę pobrać dane z kontrolera Spring za pomocą Ajax (zazwyczaj "Lista "). Nie wiem o tym teraz, ale Spring MVC 3.0.2 powinien obsługiwać niektóre mechanizmy, takie jak JSON. Wiesz o tym? Mam na myśli, czy masz jakieś linki, jeśli używałeś takich rzeczy w Spring MVC? Możesz odrzucić moją prośbę, ponieważ nie jest to oryginalne pytanie. Dziękuję Ci. – Tiny

2

Możemy mieć wiele metod GET i POST w jednym kontrolerze, musimy użyć atrybutu value na ten cel

Ex:

@RequestMapping(method=RequestMethod.GET, value = "/showForm") 
public ModelAndView showForm(){ 
} 

@RequestMapping(method=RequestMethod.GET, value = "/processAjaxRequest") 
public ModelAndView processAjax(){ 

ModelAndView modelAndView = new ModelAndView("page.jsp"); 
modelAndView.addObject("ajax_response", ajax_response); 
    return modelAndView; 
} 
+0

Dzięki za odpowiedź. – Tiny

Powiązane problemy