我一直在使用Netbeans和Glassfish服务器处理Spring 3.0 Web应用程序。我现在要将应用程序部署为公共使用,但是在尝试从Glassfish迁移到Tomcat时,我遇到了错误。我的应用程序使用AJAX从应用程序中的URL获取信息,但是当我请求URL时,我得到以下内容:
此请求标识的资源只能根据请求“accept”标题()生成具有不可接受特征的响应。
我的控制器要求它提供的信息如下:
@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 :(得分:0)
发生此错误是因为您的浏览器在“Accept”标题中发送到服务器的内容与服务器可以从URL /电/用途/
返回的内容不匹配如果您使用的是像jQuery这样的库(并且不执行跨域请求,这很重要),那么您的浏览器将发送此接受标头:
接受:application / 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?