This is close to a question I am going to post in this forum.
But an html <form> post will take the form values and make a string like you posted. They will be sent as request parameters in the Request object. My post will ask how to get the form values in as json in the RequestBody. But I have been spending the past few weeks doing this, and I can only get things like @RequestParam or @ModelAttribute to work. With @ModelAttribute if you have a domain object with setters that match the param names it can create an instance of that domain object and populate their values directly.
In my code though I post my forms through Ajax/JQuery .post() function. and use form.serialize() method to serialize the form values and post them. These definitely got sent as RequestParams.
Also, if you use Spring's form tags and add a backing domain object, then you can just get the domain object to be passed in as a parameter to your controller method.
As an example wihtout Spring form tags, this is my registration page and code
my registration jsp page
Code:
<script type="text/javascript" src="${pageContext.request.contextPath}/js/eventgate/forms/submitRegistration.js"></script>
<form id="registrationForm" class="popupForm">
<div class="line">
<p>Please Register</p>
</div>
<div class="line">
<label for="login">User Name</label>
<input id="login" type="text" name="login" placeholder="User Name">
</div>
<div class="line">
<label for="password">Password</label>
<input id="password" type="password" name="password" placeholder="Password">
</div>
<div class="line">
<label for="firstName">First Name</label>
<input id="firstName" type="text" name="firstName" placeholder="First Name">
</div>
<div class="line">
<label for="lastName">Last Name</label>
<input id="lastName" type="text" name="lastName" placeholder="Last Name">
</div>
<div class="line radius6">
<a id="submitRegistration" class="button large" href="javascript:parent.$.fancybox.close();">Submit Registration</a>
</div>
</form>
My javascript for the page
Code:
$('#submitRegistration').click(function(){
var login = document.getElementById('login').value;
var firstName = document.getElementById('firstName').value;
var lastName = document.getElementById('lastName').value;
var controllerPath = "/users";
alert($("#registrationForm").serialize());
$.post(controllerPath, $("#registrationForm").serialize(),
function(){
//afterLogin(data);
showAlert('Thank you ' + firstName + ' ' + lastName + ' for registering with EventGate. Your UserName for logging in is ' + login + '. No verification is required.');
}
).error(function() { showAlert("Registration Failed"); });
});
And finally my controller method. My controller is mapped to "/users" so the requestMapping on the method includes that from the class level annotation
Code:
@RequestMapping(method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
public void register(@RequestParam() String login,
@RequestParam() String password,
@RequestParam() String firstName,
@RequestParam() String lastName) {
User user = new User(login, password, firstName, lastName);
userService.register(user);
}
So in my case the values from the form get submitted and passing in as @RequestParam
Something similar I have in jsp and javascript, but my code is different is this method
Code:
@RequestMapping(value="/support", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.OK)
public void support(Support support) {
System.out.println(support);
}
In that case the support.jsp and javascript have the same type of code for registration, but in my method I don't annotate it at all for the parameter and Spring automatically converted the request params into a Support object because the Support object has
Code:
public class Support {
private String firstName;
private String lastName;
private String email;
private String comment;
//getters and setters
}
Hope that helps. and shows that it does work. 
Mark