supertonsky
supertonsky

Reputation: 2743

Can @RequestParam be used on non GET requests?

Spring documentation says:

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

Answers (3)

user07
user07

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";

}

  • JSP might look something like that:

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

Amit
Amit

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

Arash
Arash

Reputation: 12465

It works with posts too. Can you post your method body and you html?

Upvotes: 6

Related Questions