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.

 

Introduction

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.

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

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

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>5.0.4.RELEASE</version>
</dependency>

 

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.

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@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){
    customerService.deleteCustomerById(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.

 

Summary

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.