2012-04-20 34 views
5

Soy muy nuevo en JSON/Spring MVC y estoy tratando de obtener un ejemplo simple de una llamada AJAX a un controlador Spring MVC, pero sigo devolviendo un error de 400 - Bad Request .Solicitud JSON con JQuery/Ajax con Spring

Después de buscar en Internet, he descubierto que esto generalmente se debe a que no se establece el tipo de contenido apropiado, pero [creo] que lo he hecho.

Aquí es mi llamada AJAX:

//validate the object 
    var urlString = "/ajax/add/"; 

    $.ajax({ 
     type:"POST", 
     url: urlString, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     data: {value1: 'apples', value2 : 'oranges'}, 
     success: function(result){ 
      alert("success"); 
     }, 
     error: function(jqXHR, textStatus, errorThrown){ 
      alert("error:" + textStatus + " exception:" + errorThrown); 
     } 

    }) ; 

Y mi controlador:

@Controller 
itpublic class AddController { 

private static Logger m_log = null; 

@RequestMapping(value = "/ajax/add") 
public String handle(@RequestBody String json){ 

    DummyClass dummyRequest; 
    try { 

     ObjectMapper mapper = new ObjectMapper(); 
     dummyRequest = mapper.readValue(json, DummyClass.class); 
     m_log.info("Value1: " + dummyRequest.getValue1()); 
     m_log.info("Value2: " + dummyRequest.getValue2()); 
    } catch (Exception e) { 

    } 
    finally{ 


    } 
    return "called"; 
} 

¿Puede alguien ayudarme?

edición

Aquí es mi contexto que utilizo para configurar primavera:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" 
xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

<context:component-scan base-package="com.project.do" /> 

<!--<mvc:annotation-driven/> --> 

<bean class="com.project.do.interceptors.handler.mapping.HandlerInterceptorAnnotationAwareHandlerMapping "/> 

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> 

<bean class="com.project.do.viewresolver.ProjectViewResolver" > 
    <property name="tilesResolver" ref="tilesResolver" /> 
    <property name="jspResolver" ref="jspResolver" /> 
</bean> 

<bean id="tilesResolver" class ="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" /> 
    <property name="order" value="2" /> 
</bean> 

<bean id="jspResolver" 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/jsp/" /> 
    <property name="suffix" value=".jsp" /> 
    <property name="order" value="3" /> 
</bean> 

<bean id ="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
    <property name="definitions" value="/WEB-INF/tiles/tiles.xml" /> 
    <property name="preparerFactoryClass" value="org.springframework.web.servlet.view.tiles2.SpringBeanPreparerFactory"/> 
</bean> 

<mvc:resources mapping="/css/**" location="/css/" /> 
<mvc:resources mapping="/js/**" location="/js/" /> 
<mvc:resources mapping="/images/**" location="/images/" /> 
<mvc:resources mapping="/javascript/**" location="/javascript/" /> 
<mvc:resources mapping="/scripts/**" location="/scripts/" /> 
<mvc:resources mapping="/styles/**" location="/styles/" /> 
<mvc:resources mapping="/help/**" location="/help/" /> 

<!-- <mvc:view-controller path="/" view-name="welcome"/> --> 

deben tener en cuenta que tengo un controlador de trabajo con el Ajax en el paquete de com.project .do.working, pero el Controller que no funciona con Ajax y JSON está en el mismo paquete com.project.do.not.working

+0

¿Cómo se configura la primavera? ¿Podría editar la pregunta y agregar sus detalles de configuración (probablemente un archivo XML a menos que esté utilizando el estilo @Configuration más reciente). – andyb

+0

Adjunté el contexto utilizado para configurar Spring. ¡Gracias! – kjl

+1

¿Puedes intentar reemplazar tu cuerpo de solicitud con @RequestParam String value1, ... (at) RequestParam String value2? y desea tener method = RequestMethod.POST dentro de su ReequestMapping (como lo menciona raddykrish). – Stealth

Respuesta

1

Creo que su mapeo de solicitud no está teniendo RequestMethod como POST. Supongo que de forma predeterminada se trata de una solicitud de obtención pero su AJAX es una solicitud POST. Prueba a cambiar de la siguiente manera

@RequestMapping(value = "/ajax/add", method = RequestMethod.POST) 
public String handle(@RequestBody String json){ 
} 
+0

Estoy seleccionando esto como la respuesta, ya que parecía ser necesario. En realidad tenía este código originalmente, pero comencé a eliminar segmentos cuando las cosas no funcionaban. La mayor parte del problema parecía ser de naturaleza puramente ambiental, algo con lo que nadie podría haberme ayudado. – kjl

+0

gracias @kjl .... – raddykrish

+0

@kjl, estoy frente a un [problema] similar (http://stackoverflow.com/questions/13075101/400-bad-request-on-spring-jquery-ajax-post) , ¿puedes decirme cuál fue el verdadero problema? Podría ayudarme –

0
@Controller 
@RequestMapping("/employee/add.htm") 
public class EmployeeController { 
    @RequestMapping(method = RequestMethod.POST) 
    public @ResponseBody 
    Employee add(HttpServletRequest request, HttpServletResponse response) 
      throws Exception { 


    } 
}