JSON - Spring MVC : How to post json data to spring MVC controller
Solution 1
If you want your JSON to be deserialized into some class, than you have to define method like this (and don't forget to add jsonConverter, as in previous answer):
.... method(@RequestBody MyClass data){ ... }
But, if you want your method to accept JSON as String than do this:
.... method(@RequestBody String json){ ... }
So, basically, if you post JSON, it means that JSON is not a parameter, it is body of the request. And eventually you have to use @RequestBody annotation, instead of @RequestParam.
You can find beautifull video tutorial of Spring Mvc and JSON here: sites.google.com/site/upida4j/example
Solution 2
it seems you dont have a Json Converter configured properly
like this one
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jacksonMessageConverter"/>
</list>
</property>
</bean>
Related videos on Youtube
NinjaBoy
Im a self learner in programming. I always ask questions here on SO if I can't find the answer on google.
Updated on September 15, 2022Comments
-
NinjaBoy over 1 year
I have a problem posting JSON data from
jsp
tocontroller
. Everytime I try I get an ajax errorBad Request
. Im so new to JSON and I really don't know what I am doing wrong. I searched and tried some samples I can find in this site but still Im having a problem.In my controller:
@RequestMapping (method = RequestMethod.POST, headers ={"Accept=application/json"}, value = "/form") public String postJournalEntry (@RequestParam ("json") String json, Model model) { System.out.println(json); return "successfullySaved"; }
In my jsp:
$("#btnPostGlEntry").click(function () { var glEntries = '{"glEntries":[{"generalLedgerId":"1"},{"accountId":"4"},{"amount":"344.44"},{"description":"Test Entry"},{"debit":"Yes"}]}'; $.ajax({ type: "POST", contentType: "application/json", dataType: "json", url: contextPath + "/generalLedger/journalEntries/form", data : JSON.stringify(glEntries), success: function(data) { alert("Success!!!"); }, error: function (jqXHR, textStatus, errorThrown) { alert(jqXHR + " : " + textStatus + " : " + errorThrown); } }); });
NOTE : Im not even sure if my function in my controller is correct. I think my controller and my ajax are wrong. Please help.