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