Spring New @RequestMapping Annotations

In this article, we will discuss composed annotation introduced in Spring release 4.3 to handle @RequestMapping Annotation in Spring MVC.



Before Spring 4.3, We use @RequestMapping annotation to implement URL mapping.

@RequestMapping(value = "/hello", method = RequestMethod.GET)
 public String traditionalMapping(){
   return "hello";

With newly composed annotation, it’s easier and more readable.

@GetMapping(value = "/new-mapping")
 public String newMapping(){
    return "hello";

Here is the list of new @RequestMapping annotations introduced in Spring 4.3

  • @GetMapping
  • @PostMapping
  • @PutMapping
  • @DeleteMapping
  • @PatchMapping

These annotations naming convention clearly explain what each mapping suppose to handle.

  • @GetMapping – To handle GET request.
  • @PostMapping – For handling POST type request.


1. Setup

These annotations are part of the Spring MVC.If you are using Spring Boot for your project, we add the spring-boot-starter-web starter in pom.xml.


If you are starting with Spring Boot, read our Spring Boot guide.For traditional Spring MVC application, add spring-webmvc in pom.xml file.



2. How It Works

These new annotations work by internally annotated with @RequestMapping.To understand it more clearly, let’s take a look at the source code of the @PostMapping annotation.

@RequestMapping(method = RequestMethod.POST)
public @interface PostMapping {
// annotation body

As visible in the source code, @PostAnnotation internally using @RequestMapping, other annotations are also using the similar technique.Let’s take a look at these new annotations in more detail.


3. @GetMapping

@GetMapping(value = "/customers")
  public @ResponseBody ResponseEntity<List> getCustomers(){
     List customers = new ArrayList<>();
     return  new ResponseEntity<List>(customers,HttpStatus.OK);

 @GetMapping(value = "/customers/{id}")
  public @ResponseBody ResponseEntity<Customer> getCustomer(@PathVariable String id){
     Customer customer = customerService.getCustomerById(id);
     return new ResponseEntity(customer,HttpStatus.OK);


4. @PostMapping

@PostMapping(value = "/customers")
 public @ResponseBody ResponseEntity<Customer> getCustomers(Customer customer){
    Customer customer = customerService.createCustomer(customer);
    return new ResponseEntity(customer,HttpStatus.OK);


5. @PutMapping

@PutMapping(value = "/customers/{id}")
 public @ResponseBody ResponseEntity<Customer> getCustomers(Customer customer){
    Customer customer = customerService.updateCustomer(customer);
    return new ResponseEntity(customer,HttpStatus.OK);


6. @DeleteMapping

@DeleteMapping(value = "/customers/{id}")
 public @ResponseBody ResponseEntity<String> getCustomers(@PathVariable String id){
    return new ResponseEntity("Customer Deleted",HttpStatus.OK);


7. @PatchMapping

@PatchMapping(value = "/customers/{id}")
 public @ResponseBody ResponseEntity<String> getCustomers(@PathVariable String id){
   return new ResponseEntity("Patch",HttpStatus.OK);


8. Testing

For testing these new annotations, we can create a simple REST application using Spring Boot or traditional Spring MVC.We can test our application 

  • Using traditional way by using the web browser.
  • Use any common REST client like PostMan, AdvanceRest client etc.



In this article, we discussed the new @RequestMapping introduced with Spring.We covered how to use these new annotations and benefits of using these as compared to the traditional request mapping available with Spring MVC.