我一直在使用 Netbeans 和 Glassfish 服务器开发 Spring 3.0 Web 应用程序。我现在到了我应该部署应用程序供公众使用的地步,但是在尝试从 Glassfish 迁移到 Tomcat 时我遇到了错误。我的应用程序使用 AJAX 从应用程序内的 URL 获取信息,但是当我请求 url 时,我得到以下信息:
The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers ().
我的请求信息 Controller 如下所示:
@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 时,为什么会发生这种情况?
最佳答案
发生此错误是因为您的浏览器在“接受” header 中发送到服务器的内容与服务器从 URL/electricity/usage/返回的内容不匹配
如果您正在使用像 jQuery 这样的库(并且不进行跨域请求,这很重要)那么您的浏览器将发送此接受 header :
接受:应用程序/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?
关于ajax - 将 Spring 应用程序从 Glassfish 迁移到 Tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9840421/