Just a side note you should use the 'produces' and 'consumes' attributes of RequestMapping to define the Content-Type and Accept rather than the headers attribute. This was added in newer versions of Spring.
The likely culprit is one of 2 things:
-Either you do not have the Jackson type converter registered (should happen if you have used the annotation-config tag in the MVC namespace or the @EnableWebMvc annotation in your @Configuration file) IF the Jackson library is on your classpath.
-You have not set the Content-Type header on the incoming request to "application/json"