我有一個Spring MVC應用程序運行在Spring框架3.2上,現在我將它移動到Spring MVC 4.1。一切都很好,除了jQuery 1.7.2 Ajax/Json調用獲取「404 Not Found」錯誤頁面。Spring 4.1 MVC不派發我的Ajax Json調用到我的控制器方法404未發現錯誤發生
配置爲:web.xml中
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
<filter>
<description>generated-persistence-filter</description>
<filter-name>postgresql41Filter</filter-name>
<filter-class>
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
</filter-class>
<init-param>
<param-name>entityManagerFactoryBeanName</param-name>
<param-value>postgresql41</param-value>
</init-param>
</filter>
<filter>
<description>generated-sitemesh-filter</description>
<filter-name>Sitemesh Filter</filter-name>
<filter-class>
com.opensymphony.module.sitemesh.filter.PageFilter
</filter-class>
</filter>
web的context.xml中爲:
<bean id="beanNameViewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver" />
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/pages/" />
</bean>
<bean id="iPhoneUserAgentViewResolver" class="org.skyway.spring.util.viewresolution.UserAgentViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="agentSubstring" value="iPhone" />
<property name="prefix" value="/WEB-INF/iphone/" />
<property name="order" value="0" />
</bean>
Controller類如:
@Controller("FirmController")
@ResponseBody
public class FirmController {
/*Added by CheckABNfromABR*/
@RequestMapping(value="/checkAbnbyAbr", method=RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody String checkAbnbyAbr(@RequestParam("abn") String abn, HttpServletRequest request, HttpServletResponse response, Locale locale, Model model) throws IOException{
/*ObjectMapper mapper = new ObjectMapper();*/
/*AbnInfo requesInfo = mapper.readValue(json, AbnInfo.class);*/
AbnInfo abnInfo = new AbnInfo();
abnInfo.setAbn(abn);
String viewName = "Success";
if (viewName.equalsIgnoreCase("Success"))
abnInfo.setValidation("Success");
else
abnInfo.setValidation("Error");
return toJson(abnInfo);
}
}
JavaScript代碼爲:
function checkAjaxCall(inabn){
/*var name = $('#name').val();
var location = $('#location').val(); */
/*var json = {"name" : name,"location" : location}; */
/*var json = {"abn" : inabn};*/
jQuery.ajax({
url: "checkAbnbyAbr",
type: 'GET',
data: "abn="+inabn,
dataType: "json",
/*cache: false,*/
async: false,
beforeSend: function(xhr) {
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json");
},
success:function(response){
/*alert("Validation: "+response.validation+" Name: "+response.name+" Location: "+response.location);*/
console.log("Validation: "+response.validation+"|");
},
error:function(jqXhr, textStatus, errorThrown){
alert(textStatus);
}
});
return true;
};
名
請求頭的螢火:
Accept application/json
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Content-Type application/json
Cookie JSESSIONID=55AD33FFBF4524926A53C660FA734F01
Host localhost:8080
Referer http://localhost:8080/OZSSCMEMAC/newFirm
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:33.0) Gecko/20100101 Firefox/33.0
X-Requested-With XMLHttpRequest
響應頭的螢火:
內容語言烯 內容長度1042 內容類型文本/ HTML;字符集= UTF-8 日期星期二, 2014年11月4日0點14分43秒GMT 服務器Apache的狼/ 1.1
我設置log4j.properties以支持調試狀態的Spring應用程序,我得到了一些服務器信息:
2014-11-04 10:14:43,524 DEBUG [http-nio-8080-exec-34] OpenEntityManagerInViewFilter - Opening JPA EntityManager in OpenEntityManagerInViewFilter
2014-11-04 10:14:43,524 DEBUG [http-nio-8080-exec-34] OpenEntityManagerInViewFilter - Opening JPA EntityManager in OpenEntityManagerInViewFilter
2014-11-04 10:14:43,524 DEBUG [http-nio-8080-exec-34] OpenEntityManagerInViewFilter - Closing JPA EntityManager in OpenEntityManagerInViewFilter
2014-11-04 10:14:43,524 DEBUG [http-nio-8080-exec-34] OpenEntityManagerInViewFilter - Closing JPA EntityManager in OpenEntityManagerInViewFilter
2014-11-04 10:14:43,524 DEBUG [http-nio-8080-exec-34] EntityManagerFactoryUtils - Closing JPA EntityManager
2014-11-04 10:14:43,524 DEBUG [http-nio-8080-exec-34] EntityManagerFactoryUtils - Closing JPA EntityManager
似乎Ajax/Json請求由OpenEntityManagerInViewFilter處理,處理程序未找到正確的Controller方法。
我相信在配置文件中有一些配置錯過了,我沒有發現從谷歌的任何東西的Spring 4.1 Ajax/JSON調用配置。
任何人都有這種經驗,請指教!
感謝您點了正確的方向。實際上,Spring 3.1與Spring 3.1完全不同。我必須明確指定我們web.xml中的每個請求映射servlet-mapping如add: – 2014-11-08 05:37:27