que mvc introduccion funciona dependencias configurar configuracion conceptos como arquitectura spring spring-mvc request-mapping httpverbs

introduccion - que es spring mvc y como funciona



Combine los métodos de solicitud GET y POST en Spring (3)

A continuación se muestra una de las formas en que puede lograr eso, puede que no sea una forma ideal de hacerlo.

Tener un método de aceptar ambos tipos de solicitud, a continuación, comprobar qué tipo de solicitud que ha recibido, es del tipo "GET" o "POST", una vez que se llega a saber que, hacer acciones respectivas y el método de llamada que hace la tarea común para ambos solicitan métodos, es decir, GET y 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....); }

Tengo un recurso que admite solicitudes GET y POST . Aquí un código de muestra para un recurso de muestra:

@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 }

El código en los dos métodos es prácticamente el mismo, excepto digamos una definición variable. Los dos métodos se pueden combinar fácilmente usando method = {RequestMethod.POST, RequestMethod.GET} , y un simple if dentro. I intentado, pero no funciona, debido a que los dos métodos tienen un parámetro diferente en el extremo, es decir, HttpServletRequest y BindingResult (la @RequestParam no son necesarios ''s y por lo tanto no se necesitan en el POST petición). ¿Alguna idea de cómo combinar los dos métodos?


@RequestMapping(value = "/books", method = { RequestMethod.GET, RequestMethod.POST }) public ModelAndView listBooks(@ModelAttribute("booksFilter") BooksFilter filter, HttpServletRequest request) throws ParseException { //your code }

Esto funcionará tanto para GET como para POST.

Para GET si su pojo (BooksFilter) debe contener el atributo que está utilizando en el parámetro de solicitud

como abajo

public class BooksFilter{ private String parameter1; private String parameter2; //getters and setters

URl debería ser como a continuación

/ books? parameter1 = bla

De esta manera puedes usarlo tanto para GET como para POST


@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 }

si @RequestParam(required = true) entonces debe pasar el parámetro1, parámetro2

Use BindingResult y solicite según sus condiciones.

La otra manera

@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 }