2012-03-23 66 views
1

我一直在使用Netbeans和Glassfish服务器开发Spring 3.0 Web应用程序。我现在正要将应用程序部署为公共应用程序,但是试图将Glassfish从Tomcat迁移到Tomcat时,我遇到了一个错误。我的应用程序使用AJAX来从应用程序中的URL抓取信息,但是当我请求的URL,我得到以下几点:将Spring应用程序从Glassfish移动到Tomcat

该请求所标识的资源只能用特性产生反应的不能接受按要求“接受”标题()。

我为它请求看起来像这样的信息控制:

@RequestMapping(value = "/electricity/usage/") 
public @ResponseBody List<UsageData> getEUsage(HttpSession session) { 

    UsageDataDAO UsageDAO = new UsageDataDAO(); 

    User u = (User) session.getAttribute("user"); 

    List<UsageData> l = UsageDAO.getAllUsageData(u.getAccountNum(), 'e'); 

    return l; 
} 

为什么会这样,当我迁移到Tomcat?

+0

任何异常?应用程序是否开始? – Ralph 2012-03-23 14:14:27

+0

是的,除了我请求提取某些JSON数据的URL之外,该应用程序可以工作。 – 2012-03-23 14:35:41

+0

请参阅[如果这适用于您](http://stackoverflow.com/questions/2828968/mapping-restful-ajax-requests-to-spring)的情况。 – 2012-03-23 16:36:46

回答

0

这个错误是因为你的浏览器向服务器发送的“接受”头不匹配如果您正在使用像jQuery库哪些服务器可以从URL /电/使用/返回

并没有做跨域请求,这是很重要的),那么你的浏览器会发送此接受头:

接受:应用/ JSON

你收到这个错误意味着服务器并不认为URL/electicity/usage可以返回一个JSON响应。这在您的webmvc-config.xml文件中配置。这是我在与JSON请求矿山:

<!-- allows rendering responses in XML and JSON formats --> 
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" p:order="1"> 
    <property name="mediaTypes"> 
     <map> 
      <entry key="xml" value="application/xml"/> 
      <entry key="json" value="application/json"/> 
     </map> 
    </property> 
    <property name="defaultViews"> 
     <list> 
      <bean class="org.springframework.web.servlet.view.xml.MarshallingView"> 
       <property name="marshaller"> 
        <bean class="org.springframework.oxm.xstream.XStreamMarshaller" p:autodetectAnnotations="true"/> 
       </property> 
      </bean> 
      <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/> 
     </list> 
    </property> 
</bean> 

请参阅本教程在Spring MVC实现JSON响应:http://rwehner.wordpress.com/2010/06/09/2-ways-to-create-json-response-for-ajax-request-in-spring3/

为什么此代码的工作Glassfish上,而不是Tomcat的 - 这是一个很好的问题...

如果你正在做一个跨域请求,那么这个主题适用于:JQuery's getJSON() not setting Accept header correctly?

+0

就是这样。没有证据表明我有任何不正确的设置。我在链接中使用@responsebody处理程序。该代码完美地运行在glassfish上,但在tomcat中引发错误。 – 2012-03-23 17:46:07

+0

这篇文章有用吗? http://www.gotoquiz.com/web-coding/programming/java-programming/jsonajax-in-spring-mvc/ – anton1980 2012-03-23 21:24:25

+0

此外,我会使用FF中的Firebug来确保您的浏览器具有Accept:application/json头当做这个AJAX请求。如果是这样,那么你可以确定问题是应用程序配置,它不知道你的URL /电/使用/应该返回application/json内容类型。 – anton1980 2012-03-23 21:25:48