2014-02-10 46 views
2

我通过ajax向控制器请求数据,但它不能将json对象转换为java对象。我使用杰克逊2.2.3和Spring 4.0.0。你能帮我找出我做错了什么吗?谢谢。 epscms-servlet.xml中的ajax请求的Spring MVC

部分:

<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean> 
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
      <property name= "messageConverters" > 
      <list> 
       <ref bean="jacksonMessageConverter" /> 
      </list> 
     </property> 
</bean> 

AJAX请求:

var data = { 
     orderId:1, 
     parentId:0, 
     className:"test", 
     newsType:1 
    }; 
$.ajax({ 
    url : "${pageContext.request.contextPath}/classification/add/batch", 
    type : "POST", 
    data : data, 
    dataType: "json", 
     contentType: 'application/json', 
    success : function(data) { 
     alert("success"); 
    }, 
    error : function(data, status){ 
     alert(data + status); 
    } 
} 
); 

控制器:

@RequestMapping(value="/add/batch", method=RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE) 

public String batchAdd(@RequestBody Classification c){ 

    return "failure"; 
} 

Classification.java

public class Classification { 
    private int orderId; 
    private String className; 
    private int parentId; 
    private int newsType; 
    //getters and setters.. 
} 

如果我改变控制器方法

public String batchAdd(@RequestBody String cla){ 

     return "failure"; 
    } 

它做工精细,而且我可以得到JSON字符串。有没有其他人遇到过这个问题?

回答

1

您可能需要JSON.stringify()发布到终点之前,你的数据:

... 
type : "POST", 
data : JSON.stringify(data), 
dataType: "json", 
... 

下面是一些字符串化additional info。根据您需要支持哪些浏览器,您可能还需要read this

+0

谢谢Matt。事实上,我以前尝试过,但没有工作。最后我用'com.fasterxml.jackson.databind.ObjectMapper'自己映射了json数据。 – Tilney