【问题标题】:Sending HTML data through AJAX using Spring MVC使用 Spring MVC 通过 AJAX 发送 HTML 数据
【发布时间】:2013-09-06 08:11:03
【问题描述】:

我有一个 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>

好的,所以当我的调度程序中有这个&lt;bean&gt; 定义时,它工作正常。

<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)

【问题讨论】:

  • @MoritzPetersen 抱歉,更新了...

标签: java ajax json spring spring-mvc


【解决方案1】:

当我修改 AJAX 中的 Accept 标头时,它已得到修复,如本文 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");
    }
});

【讨论】:

  • 我以为你想获取 JSON?另见this answer
  • @MoritzPetersen 我的意思是,我需要 JSON 调度程序中的第二个设置。
  • @MoritzPetersen 您提供的链接不起作用,因为这只会增加一层过滤。
猜你喜欢
  • 2019-06-21
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 2015-08-21
  • 2019-03-18
  • 1970-01-01
相关资源
最近更新 更多