Estado HTTP 406. Spring MVC 3.2, jQuery, JSON

Estoy tratando de obtener la respuesta JSON de una llamada Ajax jquery en una aplicación spring mvc. La solicitud parece estar bien ya que veo las declaraciones de depuración en el método del controlador. Sin embargo, sigo viendo el error HTTP 406 ( GET http: //: 8080 / SampleFormEventInSpring / getData.html 406 No es aceptable ). Mi configuración se da a continuación. Cualquier ayuda es muy apreciada

Spring 3.2 jackson-mapper-asl-1.7.4.jar jackson-core-asl-1.7.4 Eclispe Juno Service Release 2 http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js 

Cabeceras de respuesta

 Content-Language en Content-Length 1067 Content-Type text/html;charset=utf-8 Date Sun, 05 Oct 2014 01:06:16 GMT Server Apache-Coyote/1.1 

Encabezados de solicitud

  Accept application/json Accept-Encoding gzip, deflate Accept-Language en-US,en;q=0.5 Cookie JSESSIONID=31E855326C016B194B0F013FEC470FAD Host localhost:8080 Referer http://localhost:8080/SampleFormEventInSpring/event.html User-Agent Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0 X-Requested-With XMLHttpRequest 

Código del controlador

 @RequestMapping(value = "/getData", method = RequestMethod.GET) @ResponseBody public List getProviderList() { System.out.println("Inside EventController.getData Begin"); List dataList = new ArrayList(); Data pData = new Data(); pData.setId("0012M"); pData.setName("Group"); dataList.add(pData); pData = new Data(); pData.setId("12345"); pData.setName("Individual"); dataList.add(pData); for(Data iPdata : dataList) { System.out.println("pID : " + iPdata.getId() + ",pNAME : " + iPdata.getName()); } System.out.println("Inside EventController.getData End"); return dataList; } 

Data.java

 public class Data { private String id; private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 

JS

 $(document).ready(function() { $("#getData").click(function(){ $.ajax({ type:'GET', url:'getData.html', dataType: 'json', success:function(data){ alert("Success"); } }); }); 

Yo tuve el mismo problema

Desde su jQuery y @RequestMapping sobre la URL que se usará, edite

desde

  • getData.html

a

  • getData

Sí, elimine la extensión .html .

Además: Tienes url:'getData.html', y @RequestMapping(value = "/getData" No coinciden.

Cambiar de

  • `url: ‘getData.html’

a

  • `url: ‘getData’

No olvides tus encabezados de respuesta:

 Content-Type text/html;charset=utf-8 

Debiera ser:

 Content-Type application/json 

Agregue el encabezado a los encabezados de asignación de solicitud = {“application / json”}

Debería verse como

Código del controlador

 @RequestMapping(value = "/getData", method = RequestMethod.GET,headers = { "application/json" }) @ResponseBody public List getProviderList() { System.out.println("Inside EventController.getData Begin"); ... 

El código jQuery se ve bien, pero vea la respuesta de Manuel Jordan, tiene razón, está mapeando a getData y no a getData. html .

Así que asegúrese de que su servlet de despachador esté asignado en web.xml a

  dispatcher /  

o defina y sufijo adicional para el rest de los requisitos, por ejemplo, “.json”

  dispatcher *.html   dispatcher *.json  

y cambiar la asignación en consecuencia.

Tengo un proyecto similar en github https://github.com/twignh3/rest-json tal vez pueda ayudar.