2012-04-20 12 views
5

Ich bin sehr neu zu JSON/Spring MVC und versuche, ein einfaches Beispiel für einen AJAX-Aufruf zu einem Spring MVC-Controller zu bekommen - aber ich einen Fehler von 400 - Bad Request .JSON-Anfrage mit JQuery/Ajax mit Spring

Nach dem Durchsuchen des Internets habe ich festgestellt, dass dies in der Regel durch nicht den richtigen Inhaltstyp verursacht wird - aber [ich glaube], dass ich das getan habe.

Hier ist meine AJAX-Aufruf:

//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); 
     } 

    }) ; 

Und mein Controller:

@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"; 
} 

Kann mir jemand helfen?

bearbeiten

Hier ist mein Zusammenhang, dass ich Frühling verwenden zu konfigurieren:

<?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"/> --> 

Ich sollte anmerken, dass ich einen Arbeits-Controller mit Ajax im Paket com.project haben .do.working, aber der nicht arbeitende Controller mit Ajax und JSON befindet sich im selben Paket com.project.do.not.working

+0

Wie konfigurieren Sie Spring? Können Sie die Frage bearbeiten und Ihre Konfigurationsdetails hinzufügen (wahrscheinlich eine XML-Datei, es sei denn, Sie verwenden den neueren @Configuration-Stil). – andyb

+0

Ich habe den Kontext zum Konfigurieren von Spring angefügt. Vielen Dank! – kjl

+1

Können Sie versuchen, Ihr RequestBody durch @RequestParam zu ersetzen. String Wert1, .. (at) RequestParam String Wert2? und Sie möchten method = RequestMethod.POST in Ihrem ReequestMapping haben (wie von raddykrish erwähnt). – Stealth

Antwort

1

Ich denke, Ihre Anforderungszuordnung hat keine RequestMethod als POST. Ich nehme an, es ist eine Anfrage, aber Ihr AJAX ist eine POST-Anfrage. Versuchen Sie, wie unten

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

Ich wähle dies als die Antwort, als es erforderlich schien. Eigentlich hatte ich das ursprünglich codiert, aber ich fing an, Segmente zu entfernen, wenn die Dinge nicht funktionierten. Der Großteil des Problems schien rein umweltbezogen zu sein - etwas, mit dem mir niemand hätte helfen können. – kjl

+0

danke @kjl .... – raddykrish

+0

@ kjl, ich stehe vor einem ähnlichen [Problem] (http://stackoverflow.com/questions/13075101/400-bad-request-on-spring-jquery-ajax-post) Können Sie mir bitte sagen, was das eigentliche Problem war? Es könnte mir helfen –

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


    } 
}