Поиск по сайту:

Пример аннотации Spring MVC @RequestMapping с контроллером, методами, заголовками, параметрами, @RequestParam, @PathVariable


Весна @RequestMapping

  1. @RequestMapping with Class: We can use it with class definition to create the base URI. For example:

    @Controller
    @RequestMapping("/home")
    public class HomeController {
    
    }
    

    Now /home is the URI for which this controller will be used. This concept is very similar to servlet context of a web application.

  2. @RequestMapping with Method: We can use it with method to provide the URI pattern for which handler method will be used. For example:

    @RequestMapping(value="/method0")
    @ResponseBody
    public String method0(){
    	return "method0";
    }
    

    Above annotation can also be written as @RequestMapping("/method0"). On a side note, I am using @ResponseBody to send the String response for this web request, this is done to keep the example simple. Like I always do, I will use these methods in Spring MVC application and test them with a simple program or script.

  3. @RequestMapping with Multiple URI: We can use a single method for handling multiple URIs, for example:

    @RequestMapping(value={"/method1","/method1/second"})
    @ResponseBody
    public String method1(){
    	return "method1";
    }
    

    If you will look at the source code of RequestMapping annotation, you will see that all of it’s variables are arrays. We can create String array for the URI mappings for the handler method.

  4. @RequestMapping method variable to narrow down the HTTP methods for which this method will be invoked. For example:

    @RequestMapping(value="/method2", method=RequestMethod.POST)
    @ResponseBody
    public String method2(){
    	return "method2";
    }
    	
    @RequestMapping(value="/method3", method={RequestMethod.POST,RequestMethod.GET})
    @ResponseBody
    public String method3(){
    	return "method3";
    }
    
  5. @RequestMapping with Headers: We can specify the headers that should be present to invoke the handler method. For example:

    @RequestMapping(value="/method4", headers="name=pankaj")
    @ResponseBody
    public String method4(){
    	return "method4";
    }
    	
    @RequestMapping(value="/method5", headers={"name=pankaj", "id=1"})
    @ResponseBody
    public String method5(){
    	return "method5";
    }
    
  6. @RequestMapping provides produces and consumes variables where we can specify the request content-type for which method will be invoked and the response content type. For example:

    @RequestMapping(value="/method6", produces={"application/json","application/xml"}, consumes="text/html")
    @ResponseBody
    public String method6(){
    	return "method6";
    }
    

    Above method can consume message only with Content-Type as text/html and is able to produce messages of type application/json and application/xml.

Весна @PathVariable

  1. @PathVariable annotation through which we can map the URI variable to one of the method arguments. For example:

    @RequestMapping(value="/method7/{id}")
    @ResponseBody
    public String method7(@PathVariable("id") int id){
    	return "method7 with id="+id;
    }
    	
    @RequestMapping(value="/method8/{id:[\\d]+}/{name}")
    @ResponseBody
    public String method8(@PathVariable("id") long id, @PathVariable("name") String name){
    	return "method8 with id= "+id+" and name="+name;
    }
    

Весна @RequestParam

<старт=\10\>

  • Аннотация @RequestParam для получения параметра URL и сопоставления его с аргументом метода. Например:
  • ```
    @RequestMapping(value="/method9")
    @ResponseBody
    public String method9(@RequestParam("id") int id){
    	return "method9 with id= "+id;
    }
    ```
    
    For this method to work, the parameter name should be "id" and it should be of type int.
    

    <старт=\11\>

  • Метод @RequestMapping по умолчанию: если значение для метода пусто, он работает как метод по умолчанию для класса контроллера. Например:
  • ```
    @RequestMapping()
    @ResponseBody
    public String defaultMethod(){
    	return "default method";
    }
    ```
    
    As you have seen above that we have mapped `/home` to `HomeController`, this method will be used for the default URI requests.
    

    <старт=\12\>

  • Резервный метод @RequestMapping: мы можем создать резервный метод для класса контроллера, чтобы убедиться, что мы перехватываем все клиентские запросы, даже если нет подходящих методов обработчика. Это полезно при отправке пользовательских страниц ответа 404 пользователям, когда для запроса нет методов обработчика.
  • ```
    @RequestMapping("*")
    @ResponseBody
    public String fallbackMethod(){
    	return "fallback method";
    }
    ```
    

    Программа тестирования Spring RestMapping

    Мы можем использовать springTest.sh для вызова всех вышеперечисленных методов и вывода их результатов. Это выглядит ниже.

    #!/bin/bash
    
    echo "curl https://localhost:9090/SpringRequestMappingExample/home/method0";
    curl https://localhost:9090/SpringRequestMappingExample/home/method0;
    printf "\n\n*****\n\n";
    
    echo "curl https://localhost:9090/SpringRequestMappingExample/home";
    curl https://localhost:9090/SpringRequestMappingExample/home;
    printf "\n\n*****\n\n";
    
    echo "curl https://localhost:9090/SpringRequestMappingExample/home/xyz";
    curl https://localhost:9090/SpringRequestMappingExample/home/xyz;
    printf "\n\n*****\n\n";
    
    echo "curl https://localhost:9090/SpringRequestMappingExample/home/method1";
    curl https://localhost:9090/SpringRequestMappingExample/home/method1;
    printf "\n\n*****\n\n";
    
    echo "curl https://localhost:9090/SpringRequestMappingExample/home/method1/second";
    curl https://localhost:9090/SpringRequestMappingExample/home/method1/second;
    printf "\n\n*****\n\n";
    
    echo "curl -X POST https://localhost:9090/SpringRequestMappingExample/home/method2";
    curl -X POST https://localhost:9090/SpringRequestMappingExample/home/method2;
    printf "\n\n*****\n\n";
    
    echo "curl -X POST https://localhost:9090/SpringRequestMappingExample/home/method3";
    curl -X POST https://localhost:9090/SpringRequestMappingExample/home/method3;
    printf "\n\n*****\n\n";
    
    echo "curl -X GET https://localhost:9090/SpringRequestMappingExample/home/method3";
    curl -X GET https://localhost:9090/SpringRequestMappingExample/home/method3;
    printf "\n\n*****\n\n";
    
    echo "curl -H "name:pankaj" https://localhost:9090/SpringRequestMappingExample/home/method4";
    curl -H "name:pankaj" https://localhost:9090/SpringRequestMappingExample/home/method4;
    printf "\n\n*****\n\n";
    
    echo "curl -H "name:pankaj" -H "id:1" https://localhost:9090/SpringRequestMappingExample/home/method5";
    curl -H "name:pankaj" -H "id:1" https://localhost:9090/SpringRequestMappingExample/home/method5;
    printf "\n\n*****\n\n";
    
    echo "curl -H "Content-Type:text/html" https://localhost:9090/SpringRequestMappingExample/home/method6";
    curl -H "Content-Type:text/html" https://localhost:9090/SpringRequestMappingExample/home/method6;
    printf "\n\n*****\n\n";
    
    echo "curl https://localhost:9090/SpringRequestMappingExample/home/method6";
    curl https://localhost:9090/SpringRequestMappingExample/home/method6;
    printf "\n\n*****\n\n";
    
    echo "curl -H "Content-Type:text/html" -H "Accept:application/json" -i https://localhost:9090/SpringRequestMappingExample/home/method6";
    curl -H "Content-Type:text/html" -H "Accept:application/json" -i https://localhost:9090/SpringRequestMappingExample/home/method6;
    printf "\n\n*****\n\n";
    
    echo "curl -H "Content-Type:text/html" -H "Accept:application/xml" -i https://localhost:9090/SpringRequestMappingExample/home/method6";
    curl -H "Content-Type:text/html" -H "Accept:application/xml" -i https://localhost:9090/SpringRequestMappingExample/home/method6;
    printf "\n\n*****\n\n";
    
    echo "curl https://localhost:9090/SpringRequestMappingExample/home/method7/1";
    curl https://localhost:9090/SpringRequestMappingExample/home/method7/1;
    printf "\n\n*****\n\n";
    
    echo "curl https://localhost:9090/SpringRequestMappingExample/home/method8/10/Lisa";
    curl https://localhost:9090/SpringRequestMappingExample/home/method8/10/Lisa;
    printf "\n\n*****\n\n";
    
    echo "curl https://localhost:9090/SpringRequestMappingExample/home/method9?id=20";
    curl https://localhost:9090/SpringRequestMappingExample/home/method9?id=20;
    printf "\n\n*****DONE*****\n\n";
    

    Обратите внимание, что я развернул свое веб-приложение на Tomcat-7, и оно работает на порту 9090. SpringRequestMappingExample — это контекст сервлета приложения. Теперь, когда я запускаю этот скрипт через командную строку, я получаю следующий вывод.

    pankaj:~ pankaj$ ./springTest.sh 
    curl https://localhost:9090/SpringRequestMappingExample/home/method0
    method0
    
    *****
    
    curl https://localhost:9090/SpringRequestMappingExample/home
    default method
    
    *****
    
    curl https://localhost:9090/SpringRequestMappingExample/home/xyz
    fallback method
    
    *****
    
    curl https://localhost:9090/SpringRequestMappingExample/home/method1
    method1
    
    *****
    
    curl https://localhost:9090/SpringRequestMappingExample/home/method1/second
    method1
    
    *****
    
    curl -X POST https://localhost:9090/SpringRequestMappingExample/home/method2
    method2
    
    *****
    
    curl -X POST https://localhost:9090/SpringRequestMappingExample/home/method3
    method3
    
    *****
    
    curl -X GET https://localhost:9090/SpringRequestMappingExample/home/method3
    method3
    
    *****
    
    curl -H name:pankaj https://localhost:9090/SpringRequestMappingExample/home/method4
    method4
    
    *****
    
    curl -H name:pankaj -H id:1 https://localhost:9090/SpringRequestMappingExample/home/method5
    method5
    
    *****
    
    curl -H Content-Type:text/html https://localhost:9090/SpringRequestMappingExample/home/method6
    method6
    
    *****
    
    curl https://localhost:9090/SpringRequestMappingExample/home/method6
    fallback method
    
    *****
    
    curl -H Content-Type:text/html -H Accept:application/json -i https://localhost:9090/SpringRequestMappingExample/home/method6
    HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    Content-Type: application/json
    Content-Length: 7
    Date: Thu, 03 Jul 2014 18:14:10 GMT
    
    method6
    
    *****
    
    curl -H Content-Type:text/html -H Accept:application/xml -i https://localhost:9090/SpringRequestMappingExample/home/method6
    HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    Content-Type: application/xml
    Content-Length: 7
    Date: Thu, 03 Jul 2014 18:14:10 GMT
    
    method6
    
    *****
    
    curl https://localhost:9090/SpringRequestMappingExample/home/method7/1
    method7 with id=1
    
    *****
    
    curl https://localhost:9090/SpringRequestMappingExample/home/method8/10/Lisa
    method8 with id= 10 and name=Lisa
    
    *****
    
    curl https://localhost:9090/SpringRequestMappingExample/home/method9?id=20
    method9 with id= 20
    
    *****DONE*****
    
    pankaj:~ pankaj$ 
    

    Большинство из них понятны сами по себе, хотя вы можете проверить методы по умолчанию и резервные методы. Это все, что касается примера Spring RequestMapping, я надеюсь, что он поможет вам понять эту аннотацию и ее различные функции. Вы должны загрузить пример проекта по ссылке ниже и попробовать различные сценарии, чтобы изучить его дальше.

    Скачать проект Spring MVC RequestMapping




    Все права защищены. © Linux-Console.net • 2019-2024