2012-04-20 46 views
5

Tôi rất mới với JSON/Spring MVC và đang cố gắng lấy một ví dụ đơn giản về cuộc gọi AJAX tới bộ điều khiển Spring MVC - nhưng tôi vẫn trả về lỗi 400 - Yêu cầu không hợp lệ .Yêu cầu JSON với JQuery/Ajax với Spring

Sau khi quét Internet, tôi thấy rằng điều này thường do không đặt loại nội dung phù hợp - nhưng [tôi tin] tôi đã làm điều đó.

Đây là cuộc gọi của tôi 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); 
     } 

    }) ; 

Và điều khiển của tôi:

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

bất cứ ai có thể giúp tôi không?

chỉnh sửa

Đây là bối cảnh của tôi mà tôi sử dụng để cấu hình mùa xuân:

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

tôi nên lưu ý rằng tôi có một bộ điều khiển làm việc với Ajax trong com.project gói .do.working, nhưng Bộ điều khiển không hoạt động với Ajax và JSON nằm trong cùng một gói com.project.do.not.working

+0

How are you cấu hình mùa xuân? Bạn có thể chỉnh sửa câu hỏi và thêm chi tiết cấu hình của mình (có thể là tệp XML trừ khi bạn đang sử dụng kiểu @Configuration mới hơn). – andyb

+0

Tôi đã đính kèm ngữ cảnh được sử dụng để định cấu hình Spring. Cảm ơn bạn! – kjl

+1

Bạn có thể thử thay thế RequestBody bằng @RequestParam String value1, .. (at) RequestParam String value2? và bạn muốn có method = RequestMethod.POST bên trong ReequestMapping của bạn (như đã đề cập bởi raddykrish). – Stealth

Trả lời

1

Tôi nghĩ rằng ánh xạ yêu cầu của bạn không có RequestMethod như POST. Tôi đoán theo mặc định nó lấy nó một yêu cầu nhận được nhưng AJAX của bạn là một yêu cầu POST. Cố gắng thay đổi như sau

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

Tôi chọn câu trả lời này vì câu trả lời dường như là bắt buộc. Tôi thực sự đã có mã này ban đầu, nhưng bắt đầu tước các phân đoạn khi mọi thứ không hoạt động. Phần lớn vấn đề dường như hoàn toàn là môi trường trong tự nhiên - điều mà không ai có thể giúp tôi. – kjl

+0

thanks @kjl .... – raddykrish

+0

@kjl, tôi đang đối mặt với một [vấn đề] tương tự (http://stackoverflow.com/questions/13075101/400-bad-request-on-spring-jquery-ajax-post) , bạn có thể cho tôi biết vấn đề thực sự là gì không? Nó có thể giúp tôi –

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


    } 
}