Reputation: 2743
Use the @RequestParam annotation to bind request parameters to a method parameter in your controller.
AFAIK, request parameters are variables retrieved from query strings if the request method is GET. They are also the variables retrieved from the form values when the request method is POST. I've verified this using a simple JSP that displays request parameters through method request.getParameter("key")
.
But it seems to me that @RequestParam
only works on GET method requests. It can only get values from query strings.
Is this a bug in the documentation? Can someone please cite me some documentation that describes exactly what @RequestParam
is used for, what it cannot be used for, and how it gets populated?
Can I use @RequestParam
for POST methods to get the form values? If I can't use @RequestParam
, what else can I use? I'm trying to avoid calling request.getParameter("key")
.
Upvotes: 4
Views: 20430
Reputation: 425
Instead of @RequestParam
which binds to a single form value, you can use @ModelAttribute
annotation and bind to the whole object. But it should be used in conjunction with form
or bind
Spring's JSTL.
Example: - controller that calls JSP-page, it should add objects to a Model:
@RequestMapping(value="/uploadForm", method=RequestMethod.GET)
public String showUploadForm(Model model) {
Artist artist = new Artist();
Track track = new Track();
model.addAttribute("artist", artist);
model.addAttribute("track", track);
return "uploadForm";
}
Track Title *:
Controller that processes form submission;
@RequestMapping(value="/uploadToServer", method=RequestMethod.POST)
public String uploadToServer(@ModelAttribute("artist") Artist artist, @ModelAttribute("track") Track track) { .... }
Here I found a good explanation of using @ModelAttribute annotation - krams915.blogspot.ca
Upvotes: 0
Reputation: 1
Yes it works perfectly with post method too. you can mention the method attribute of @RequestParam
as RequestMethod=POST
. Here is the code snippet
@RequestMapping(value="/register",method = RequestMethod.POST)
public void doRegister
(
@RequestParam("fname") String firstName,
@RequestParam("lname")String lastName,
@RequestParam("email")String email,
@RequestParam("password")String password
)
Upvotes: 0
Reputation: 12465
It works with posts too. Can you post your method body and you html?
Upvotes: 6