I'm searching how I can interprete a JSON parameter in my @ResourceMapping in Spring Portlet MVC. When I add @RequestBody, I got the message: @RequestBody is not supported... Really stuck on this one.
I have this:
View side:
<portlet:resourceURL var="getTest" id="ajaxTest" ></portlet:resourceURL>
<p>
<button onClick="executeAjaxTest();">Klik mij!</button>
<button onClick="$('#ajaxResponse').html('');">Klik mij!</button>
</p>
<p>
<h3>Hieronder het antwoord:</h3>
<h4 id="ajaxResponse"></h4>
</p>
<script>
function executeAjaxTest() {
var jsonObj = {
user: "Korneel",
password: "testpassword",
type: {
testParam: "test",
}
}
console.debug(JSON.stringify(jsonObj));
$.ajax({
dataType: "json",
contentType:"application/json",
mimeType: 'application/json',
url:"<%=getTest%>",
data:JSON.stringify(jsonObj),
success : function(data) {
$("#ajaxResponse").html(data['testString']);
}
});
}
</script>
Controller side:
@ResourceMapping(value="ajaxTest")
@ResponseBody
public void ajaxTestMethod(ResourceRequest request, ResourceResponse response) throws IOException, ParseException {
LOGGER.debug("ajax method");
JSONObject json = JSONFactoryUtil.createJSONObject();
json.put("testString", "Ik ben succesvol verstuurd geweest!");
response.getWriter().write(json.toString());
}
How can I use the spring magic to auto map this JSON data to my own model? Note: It's Spring Portlet MVC, not regular Spring MVC..
According to the documentation, @RequestBody is only supported in Servlet environments, not Portlet environments (same for @ResponseBody). So it seems you can't use that functionality.
You need to build your json object like this:
In your Controller you should use the @ModelAttribute annotation:
Don't forget your beans:
@ResponseBody annotation is not supported out of the box in Spring MVC portlet framework, but you can implement @ResponseBody handling yourself.
We do it by implementing custom view type and model and view resolver.