Controllers with Forms
Sending Form Data - Video
The starter code for this video is found in the path-variables branch
of the hello-spring repo. The final code presented in this video is found on the forms branch
. As always, code along to the videos on your own hello-spring project.
Sending Form Data - Text
What if we want to send over some form data? To send data via a simple form in Spring Boot, we’ll set things up like this:
We have a controller method that generates a form at index.
@GetMapping
@ResponseBody
public String helloForm() {
String html =
"<html>" +
"<body>" +
"<form method = 'get' action = '/hello'>" +
"<input type = 'text' name = 'coder' />" +
"<input type = 'submit' value = 'Greet Me!' />" +
"</form>" +
"</body>" +
"</html>";
return html;
}Remember, without an argument, @GetMapping maps to /. On form submission, the data is sent to another path, /hello. We need a controller for that.
@GetMapping("hello")
@ResponseBody
public String hello(@RequestParam String coder) {
return "Hello, " + coder + "!";
}Now, you have a controller that can handle the form submission. When the form submits, the input entered in the text box will be passed to the URL via a query string. This is why the controller method above passes in @RequestParam to handle the coder key.
To be able to submit the form via POST, we’ll need to modify the hello() controller to use @RequestMapping. Remember, @RequestMapping can annotate a method that responds to both GET and POST.
// Responds to get and post requests at /hello?coder=LaunchCoder
@RequestMapping(value = "hello", method = {RequestMethod.GET, RequestMethod.POST})
@ResponseBody
public String hello(@RequestParam String coder) {
return "Hello, " + coder + "!";
}
@GetMapping
@ResponseBody
public String helloForm() {
String html =
"<html>" +
"<body>" +
"<form method = 'post' action = '/hello'>" +
"<input type = 'text' name = 'coder' />" +
"<input type = 'submit' value = 'Greet Me!' />" +
"</form>" +
"</body>" +
"</html>";
return html;
}Check Your Understanding
Which annotation is applied above a controller class?
@Controller@GetMapping@PostMapping@RequestMapping@ResponseBody@RequestParam@PathVariable
Select all the annotations applied above a controller method from the list below.
@Controller@GetMapping@PostMapping@RequestMapping@ResponseBody@RequestParam@PathVariable