Spring JSON causa problemas cuando el framework Spring se actualiza de 3.0.2 a 3.2.0

Estaba trabajando con una aplicación web utilizando la versión 3.0.2 de Spring Framework junto con Hibernate (NetBeans 6.9.1). Más tarde, llegué a saber que había uno de los errores que estaba causando problemas al cargar varios archivos como se mencionó en mi uno de los anteriorespreguntas.

He terminado de luchar para conseguir la solución pero no he podido. Por lo tanto, actualicé la versión Spring a3.2.0.

Con la versión anterior (3.0.2), AJAX funcionaba bien conJackson 1.9.8 (su descargapágina) pero con la versión posterior (3.2.0), todo funciona bien, pero las llamadas AJAX alertan de un error en todas partes en el código JavaScript.

Hay un escenario en un lugar cuando se selecciona uno de los países en el cuadro de selección de país, la lista de estados correspondiente se recupera del controlador Spring junto con DAO. El método que se asigna con una URL en el controlador Spring es el siguiente,

@RequestMapping(value="ajax/GetStateList", method=RequestMethod.GET)
public @ResponseBody List<Object[]> getStateSelectBox(HttpServletRequest request)
{
    return cityService.getStateSelectBox(request.getParameter("countryId"));
}   

Este método se invoca cuando se selecciona un país en el cuadro de selección de país. losgetStateSelectBox() El método se define en una de las clases DAO de la siguiente manera:

@Service
@Transactional(readOnly = true, propagation=Propagation.REQUIRES_NEW)
public final class CityDAO implements CityService
{
    private SessionFactory sessionFactory;

    public void setSessionFactory(SessionFactory sessionFactory)
    {
        this.sessionFactory = sessionFactory;
    }

    @SuppressWarnings("unchecked")
    public List<Object[]> getStateSelectBox(String id)
    {
        List<Object[]> list = sessionFactory.getCurrentSession()
                          .createQuery("select s.stateId, s.stateName from StateTable s where countryId.countryId=:id order by s.stateId")
                          .setParameter("id", Long.parseLong(id)).list();

       for(Object[]o:list)
       {
           System.out.println(o[0]+" : "+o[1]);
       }
       return list;
   }
}

losforeach bucle es solo para fines de demostración, muestra todos los estados junto con su id que corresponden a lacountryId suministrado por la solicitud AJAX pero elList No se devuelve a JSP.

El código JavaScript utilizado para enviar esta solicitud AJAX alerta un error. Parece que hay algunos problemas con la asignación JSON. Lo mismo fue trabajar con la versión anterior del framework Spring (3.0.2). No estoy seguro de por qué esto causa problemas con la versión más alta de Spring, que es 3.2.0. ¿Hay algo con la versión de Spring 3.2.0 que pueda faltar?

Si necesita ver el código JavaScript, el código completo de JavaScript para lograrlo sería el siguiente.

function getStates(countryId)
{
    if(countryId==""||countryId==null||countryId==undefined||isNaN(countryId))
    {
        var str="<select id='cmbStates' name='cmbStates' onchange='errorMessage(this.value);' class='validate[required] text-input'><option value=''>Select</option></select>";
        $('#stateList').html(str);
        alert("Please select an appropriate option.");
        return;
    }

    var div=document.createElement("div");
    div.id="temp";
    document.body.appendChild(div);

    $.ajax({
        datatype:"json",
        type: "GET",
        contentType: "application/json",
        url: "/wagafashion/ajax/GetStateList.htm",
        data: "countryId=" + countryId+"&t="+new Date().getTime(),
        success: function(response)
        {
            if(typeof response==='object'&&response instanceof Array)
            {                            
                var str="<select id='cmbState' name='cmbState' onchange='errorMessage(this.value);' class='validate[required] text-input'><option value=''>Select</option>";
                var l=response.length;

                for(var i=0;i<l;i++)
                {
                    str+="<option value='"+response[i][0]+"'>"+$('#temp').text(response[i][1]).html()+"</option>";
                }
                str+="</select>";
                $('#stateList').html(str); // select box is written to #stateList div
                $('#temp').remove();
            }
        },
        error: function(e)
        {
            alert('Error: ' + e);
        }
    });
}            

Para estar seguro, la biblioteca de Jackson está en la ruta de clase y no recibo ningún error o excepción en el lado del servidor. La solicitud AJAX se realiza correctamente y se envía al DAO a través de Spring y la lista de tipos.List<Object[]> se recupera de la base de datos pero no es una respuesta de JSON a JSP (que podría / debería asignarse a una matriz de JavaScript). Es de suponer que parece que falta algo en el mapeo JSON, pero no fue el caso con la versión anterior de Spring.

EDITAR:

He tratado de analizarList<Object[]> en ambos marcos, 3.0.2 y 3.2.0, tales como

List<Object[]> list = cityService.getStateSelectBox(request.getParameter("countryId"));
ObjectMapper objectMapper=new ObjectMapper();
try
{
    objectMapper.writeValue(new File("E:/Project/SpringHibernet/wagafashionLatest/temp.json"), list);
}
catch (IOException ex){}

El archivotemp.json contiene la siguiente cadena.

[[21,"Gujarat"],[22,"Maharashtra"],[23,"Kerala"],[24,"New Delhi"]]

En ambos casos (con ambos marcos). Por lo tanto, parece que la respuesta JSON debería ser la misma en ambos casos.

lostemp.json El archivo también se puede deserializar de la siguiente manera.

try
{
    ObjectMapper mapper=new ObjectMapper();
    List<Object[]> list = mapper.readValue(new File("E:/Project/SpringHibernet/wagafashionLatest/temp.json"), new TypeReference<List<Object[]>>() {});

    for(Object[]o:list)
    {
        System.out.println(o[0]+" : "+o[1]);
    }
} 
catch (IOException ex) 
{

}

Funciona bien y elforeach bucle itera sobre elList de tipoList<Object[]>. Por lo tanto, el problema podría ser causado por el propio marco Spring. ¿Qué más se requiere, no estoy seguro. ¿Por qué no es mapeado por Jackson?

Respuestas a la pregunta(2)

Su respuesta a la pregunta