SpringMVC Returning a List Of Objects With JSON

java, jquery, json, spring, spring-mvc

Solution

Firstly please make sure your Spring version is 3.1.1 release and you have added jackson.jar in you lib, then try using below code, your code has something reduntant.

@RequestMapping(value="/getCrimeTypeList.htm", method = RequestMethod.GET)
public @ResponseBody List<CrimeType> getCrimeTypeList(@RequestParam(value="crimeCatId") Integer crimeCatId) throws Exception{    
            try {
                return this.crimeTypeManager.getCrimeTypeList(crimeCatId);
                //return "true";
            } catch (Exception e) {
                logger.error(e.getMessage());
                return null;
            }
}
$("select#offenceCatId").change(function(){
        var param={crimeCatId:$(this).val()};
        $.ajax({
            type:'GET',
            url:'getCrimeTypeList.htm',
            data:param,
            success:function(data){
                //append options to list
            }
        });
});

Problem

I have two select options and i would like when the user selects one option that other is populated with data from the database. However i am having issues in getting the object list returned to the view. Controller ``` @RequestMapping(value="getCrimeTypeList.htm", method = RequestMethod.GET) public @ResponseBody List<CrimeType> getCrimeTypeList(@RequestParam(value="crimeCatId") Integer crimeCatId) throws Exception{ try { List<CrimeType> crimeTypeList = this.crimeTypeManager.getCrimeTypeList(crimeCatId); return crimeTypeList; } catch (Exception e) { logger.error(e.getMessage()); return null; } } ``` JQuery ``` $("select#offenceCatId").change(function(){ $.ajax({ type:'GET', url:'getCrimeTypeList.htm', data:{crimeCatId: $(this).val()}, headers: { Accept: 'application/json' }, dataType: 'json', success:function(data){ alert('it worked'); } }); }); ``` HTML ``` <li> <label>Offence Type</label> <form:select path="offenceTypeId" id="offenceTypeId" title="Offence Type"> <form:options items="${crimeType.crimeTypeList}" itemValue="crimeTypeId" itemLabel="crimeTypeDesc"/> </form:select> <form:errors path="offenceTypeId" class="errors" /> </li> ``` Error ``` "NetworkError: 400 Bad Request - http://localhost:8084/crimeTrack/getCrimeTypeList.htm?[object%20Object]" ``` EDITED I did some experimentation and found if the Controller is returning a String it works however once its returning an Object i am having the issues stated. FireBug ``` GET http://localhost:8084/crimeTrack/getCrimeTypeList.htm?crimeCatId=6 406 Not Acceptable Response Headers Content-Length 1067 Content-Type text/html;charset=utf-8 Date Fri, 29 Mar 2013 00:58:17 GMT Server Apache-Coyote/1.1 Request Headers Accept application/json Accept-Encoding gzip, deflate Accept-Language en-US,en;q=0.5 Host localhost:8084 Referer http://localhost:8084/crimeTrack/crime_registration.htm User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0 X-Requested-With XMLHttpRequest ```

Original source