9

in the below example, I am trying to undersatnd the difference between @RequestMapping and @PostMapping. For @RequestMapping:

when i do the POST request: http://localhost:8085/call1/initparam1?val=1111 via postman, it executes correctly. but when its is proceeded by by GET request
http://localhost:8085/call1/getparam1

i do not get 1111 as a result.

For @PostMapping, when i do the POST request: http://localhost:8085/call1/initparam2/1999 via postman, it executes correctly. but when its is proceeded by by GET request
http://localhost:8085/call1/getparam1

i do not get 1999 as a result.

please explain to me what is the difference between using both annotations, as i spent time googling and researching but i could not figure out why the first example is not working.

Controller1

@Controller
@ResponseBody
@RequestMapping("/call1")
public class Call1 {

public String str = "inti";

@RequestMapping(value = "/initparam1", method = RequestMethod.POST)
public void initparam1(@RequestParam(value = "val") String val) {
    this.str = val;
}

@PostMapping(value = "/initparam2/{val}")
public void initparam2(@PathVariable String val) {
    this.str = val;
}

@RequestMapping("/getparam1")
@ResponseBody
public String getParam1() {
    return this.str;
}
}
Michael Petch
  • 46,082
  • 8
  • 107
  • 198
Amrmsmb
  • 1
  • 27
  • 104
  • 226
  • Please correct me if I am wrong but what I understand is your first example is **not working** and second is **working correctly**. Because in both the case you have written **'I do not get...'** – Dhaval Simaria Jul 14 '19 at 07:34
  • Both the scenarios are setting and return the respective values in GET request. I have checked with Spring Boot 2.1.6 version. – Dhaval Simaria Jul 14 '19 at 07:41
  • https://howtodoinjava.com/spring5/webmvc/controller-getmapping-postmapping/ – Manjitha Teshara Mar 06 '20 at 15:07
  • RequestMapping vs specific Get/Post mapping discussed here https://stackoverflow.com/questions/39077787/difference-between-the-annotations-getmapping-and-requestmappingmethod-requ – Amit G Apr 21 '20 at 05:43

1 Answers1

17

From the @PostMapping docs :

Specifically, @PostMapping is a composed annotation that acts as a shortcut for @RequestMapping(method = RequestMethod.POST).

So it is only convenience annotation that is more "verbose" and indicates that method annotated with it is used for handling POST HTTP requests.

I have just checked your controller methods with 2.1.4 spring boot version and your scenarios work as expected so there has to be something wrong in your configuration or the way you are sending requests.

Michał Krzywański
  • 15,659
  • 4
  • 36
  • 63
  • but did you realized the other part of the quest. please. using the POSTMAPPING gives me the expected result but the REQUESTMAPPING gives unexpected result – Amrmsmb Jul 14 '19 at 07:31
  • I have just checked your set up and it works as expected, both endpoints set the value of your String. – Michał Krzywański Jul 14 '19 at 07:31