Combine GET and POST request methods in Spring

前端 未结 3 954
醉酒成梦
醉酒成梦 2020-12-07 20:14

I have a resource that supports both GET and POST requests. Here a sample code for a sample resource:

@RequestMapping(value = \"/bo         


        
相关标签:
3条回答
  • 2020-12-07 20:34
    @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
    }
    

    if @RequestParam(required = true) then you must pass parameter1,parameter2

    Use BindingResult and request them based on your conditions.

    The Other way

    @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
    }
    
    0 讨论(0)
  • 2020-12-07 20:34
    @RequestMapping(value = "/books", method = { RequestMethod.GET, 
    RequestMethod.POST })
    public ModelAndView listBooks(@ModelAttribute("booksFilter") BooksFilter filter,
         HttpServletRequest request) 
        throws ParseException {
    
    //your code 
    }
    

    This will works for both GET and POST.

    For GET if your pojo(BooksFilter) have to contain the attribute which you're using in request parameter

    like below

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

    URl should be like below

    /books?parameter1=blah

    Like this way u can use it for both GET and POST

    0 讨论(0)
  • 2020-12-07 20:47

    Below is one of the way by which you can achieve that, may not be an ideal way to do.

    Have one method accepting both types of request, then check what type of request you received, is it of type "GET" or "POST", once you come to know that, do respective actions and the call one method which does common task for both request Methods ie GET and 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....);
    }
    
    0 讨论(0)
提交回复
热议问题