我在我的 Spring MVC 3 应用程序中配置了内容协商,如下所示:
<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="0" />
<property name="favorPathExtension" value="true" />
<property name="defaultContentType">
<ref bean="htmlMediaType" />
</property>
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
</map>
</property>
<property name="defaultViews">
<list>
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
<property name="objectMapper" ref="jacksonObjectMapper" />
</bean>
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<property name="marshaller">
<bean class="org.springframework.oxm.castor.CastorMarshaller" />
</property>
</bean>
</list>
</property>
<property name="viewResolvers">
<ref bean="tilesViewResolver" />
</property>
</bean>
这很好用——我的所有视图都将呈现为带有“普通”视图模板的 html 视图,或者根据“接受”标头呈现为视图模型数据的 JSON 或 XML 转储。
但是,这对我来说似乎有点安全漏洞。我的一些操作是 API 样式的操作,并且在 HTML、JSON 或 XML 中合法可用。但是,某些视图仅适用于 HTML。我真的不希望最终用户能够通过将“.json”添加到 url 来查看所有视图数据。
有没有办法在 Spring MVC 中进行内容协商,但仅限于明确选择加入的操作?我可以设置一个控制器注释@RespondsTo("xml", "json")
吗?