2013-03-28 5 views
2

У меня есть два варианта выбора, и мне бы хотелось, чтобы пользователь выбирал один из параметров, который заполняется другими данными из базы данных. Однако у меня возникают проблемы с возвратом списка объектов.SpringMVC Возвращает список объектов с помощью JSON

Контроллер

@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> 

Er ROR

"NetworkError: 400 Bad Request - http://localhost:8084/crimeTrack/getCrimeTypeList.htm?[object%20Object]" 

EDITED Я сделал некоторые эксперименты и нашел, если контроллер возвращает строку он работает, однако, как только его возвращение объекта я имею вопросы, изложенные.

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 
+0

Есть ли у вас какие-либо исключения там? – n1ckolas

+3

Пока вы не представили детали проблем (неправильное поведение, исключения и т. Д.) Я хотел бы сказать, что у меня в голове: мы столкнулись с тем, что независимо от того, какой тип приема вы предоставляете, если у вас есть расширение '* .htm' или' * .html' на URL вашего ресурса, вы не получите JSON. Попробуйте изменить свой URL на f.e. 'getCrimeTypeList.json' или без расширения вообще. – n1ckolas

+0

Поскольку вы используете mvc, тогда все будет в порядке, что вы должны сделать, это сказать мне, что проблема с PLZ? – OQJF

ответ

4

Во-первых, убедитесь, что ваша весна версия 3.1.1 релиз, и вы добавили jackson.jar в вас Lib, то попробуйте использовать ниже код, код имеет что-то 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 
      } 
     }); 
}); 
+0

Я получаю следующую ошибку:" "NetworkError: 406 Не приемлемо - http: // localhost: 8084/crimeTrack/getCrimeTypeList.htm? crimeCatId = 5 "" – devdar

+1

Какая версия вашей весны? У некоторых выпусков Spring есть эта проблема. – OQJF

+0

@QQJF Я использую весеннюю версию 3.1 – devdar

2

Ваш контроллер ожидает заголовок запроса Accept=application/json, в вашем случае, если вы не установить его.

Попробуйте установить Accept заголовок

jQuery.ajax({ 
     type:'GET', 
     url:'getCrimeTypeList.htm', 
     data:{crimeCatId:$(this).val()}, 
     processData:false, 
     headers: { 
      Accept: 'application/json' 
     }, 
     dataType: 'json', 
     success:function(data){ 


      //append options to list 


     } 

    }); 
+0

Я получаю следующую ошибку: NetworkError: 400 Bad Request - http: // localhost: 8084/crimeTrack/getCrimeTypeList.htm? [object% 20Object] " – devdar

+0

У вас есть библиотека джексона в вашем пути к классу –

Смежные вопросы