java - 使用 Spring MVC 通过 AJAX 发送 HTML 数据

标签 java ajax json spring spring-mvc

我有一个 AJAX 调用,该调用已被处理,并且 Spring 返回一个 jsp 页面。

@RequestMapping(value = "/getData.do")
public String getData() {
    // ...
    return "data";
}

我回来了 data.jsp .

AJAX 调用如下所示:

$.ajax({
    type : 'GET',
    url : "getData.do",

    error : function() {
        alert('failure');
    },
    success : function(result) {
        alert("Success");
    }
});

我在web.xml中有servlet映射对于 .do文件

  <servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

好的,当我有这个 <bean> 时在我的调度程序中定义,它工作正常。

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name="prefix" value="/WEB-INF/jsp/"/>
   <property name="suffix" value=".jsp"/>
</bean>

但是,当我将其更改为这个时,它失败了!

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
  <property name="mediaTypes">
    <map>
      <entry key="html" value="text/html"/>
      <entry key="json" value="application/json"/>
    </map>
  </property>
  <property name="viewResolvers">
    <list>
      <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
      <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
      </bean>
    </list>
  </property>
  <property name="defaultViews">
    <list>
      <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
    </list>
  </property>
</bean>

我需要这个 JSON。有什么想法吗?

更新:添加堆栈跟踪

SEVERE: Servlet.service() for servlet [spring] in context with path [/Foo] threw exception [Could not resolve view with name 'getData' in servlet with name 'spring'] with root cause
javax.servlet.ServletException: Could not resolve view with name 'getData' in servlet with name 'spring'
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1190)
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

最佳答案

当我修改 AJAX 中的 Accept header (如本文 Pass accepts header parameter to jquery ajax 中所述)时,它得到了修复。 .

更新了 AJAX:

$.ajax({
    type : 'GET',
    url : "getData.do",
    headers: {          
        Accept : "text/html; charset=utf-8",         
    },    
    error : function() {
        alert('failure');
    },
    success : function(result) {
        alert("Success");
    }
});

关于java - 使用 Spring MVC 通过 AJAX 发送 HTML 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18586403/

相关文章:

java - 找不到字体指定的路径

javascript - 单击两次 Ajax 填充下拉菜单

javascript - 如何将发布请求发送到 Rails 操作

javascript - 编写 MongoDB shell 脚本,以干净格式返回 ID

java - 多部分 JSON POST 请求

java - 如何在 Spring Controller 中提供文件的动态路径

java - Java Spring中的ActiveMQ数据持久化问题

java - Spring Boot - 使用自定义对象数组 JSON 序列化自定义对象

php - 如何在 ajax url 中发布带空格的波斯语句

python - 通过像这样的json文件生成数据矩阵最有效的方法是什么?