gpt4 book ai didi

java - 我的 Spring-MVC ContentNegotiatingViewResolver 设置是否正确?如何为不受支持的媒体类型发送 404 错误?

转载 作者:IT老高 更新时间:2023-10-28 13:44:31 26 4
gpt4 key购买 nike

我不知道这对于这个网站是否是一个有效的问题,但我想知道是否有人有使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com