- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我不知道这对于这个网站是否是一个有效的问题,但我想知道是否有人有使用 ContentNegotiatingViewResolver 的经验可以检查一下,如果我设置正确并帮助我发送 404 消息,请告诉我。
我想做的是让所有没有扩展名的 url 默认为 HTML 表示(在我的例子中是 freemarker View )。我想接受附加了“.json”的url来渲染json。这似乎适用于Firefox,即和chrome。我猜它适用于其他浏览器?我确保禁用了接受 header ,因为它是一个邪恶的功能,并不像文档所说的那样真正起作用。
我尝试使用“.stuff”访问 url,只是想看看会发生什么,而在我的配置中,会出现一个空白屏幕。这可以接受吗?有什么方法可以发送 404 错误吗?
还有什么我可能没有正确配置的吗?
<bean id="contentNegotiatingViewResolver"
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1"/>
<property name="ignoreAcceptHeader" value="true" />
<property name="defaultContentType" value="text/html" />
<property name="mediaTypes">
<map>
<entry key="json" value="application/json"/>
</map>
</property>
<property name="useNotAcceptableStatusCode" value="true" />
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
<property name="contentType" value="application/json" />
</bean>
</list>
</property>
<property name="viewResolvers">
<list>
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="contentType" value="text/html" />
<property name="order" value="2"/>
<property name="cache" value="true"/>
<property name="prefix" value=""/>
<property name="suffix" value=".ftl"/>
<property name="exposeSpringMacroHelpers" value="true"/>
</bean>
</list>
</property>
</bean>
最佳答案
因为您设置了 defaultContentType,所以协商总是最终找到由 freemarker View 提供的匹配内容类型。来自 ContentNegotiatingViewResolver 的 javadoc 的引用:
You can also set the setDefaultContentType directly, which will be returned when the other mechanisms (Accept header, file extension or parameter) do not result in a match.
使用此设置,文件扩展名 .stuff 匹配 contentType text/html。
然后,使用 useNotAcceptableStatusCode:
406 (Not Acceptable) status code will be returned if no match is found.
我刚刚尝试了这个(使用另一个 REST 服务应用程序的设置)并看到 Chrome 显示消息:此请求标识的资源只能生成具有根据请求“接受” header () Not Acceptable 特征的响应.
关于java - 我的 Spring-MVC ContentNegotiatingViewResolver 设置是否正确?如何为不受支持的媒体类型发送 404 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8247264/
我是一名优秀的程序员,十分优秀!