在 Spring MVC Showcase 示例(可从 STS 仪表板下载)中,我遇到以下情况。
在我看来,我有以下链接:
<li>
<a id="responseCharsetProduce" class="textLink" href="<c:url value="/response/charset/produce" />">@ResponseBody (UTF-8 charset produced)</a>
</li>
此链接生成针对 URL 的 HTTP 请求:"/response/charset/produce"
好的,这个 HTTP 请求由 Controller 类的以下方法处理(我的 Controller 类本身用 @RequestMapping(value="/response", method=RequestMethod.GET 注释,所以这个方法处理了这个请求):
@RequestMapping(value="/charset/produce", produces="text/plain;charset=UTF-8")
public @ResponseBody String responseProducesConditionCharset() {
return "\u3053\u3093\u306b\u3061\u306f\u4e16\u754c\uff01 (\"Hello world!\" in Japanese)";
}
我的疑问与@RequestMapping 注释中的produces 元素有关...
说:String[] produces The producible media types of the mapped request, narrowing the primary mapping. 所以似乎 produces 只说了方法产生的媒体类型......在我的具体情况是 Controller 方法返回的媒体类型是文本值...
但在其他地方阅读时我发现 produces 属性排除了 HTTP 请求,其 Accepts header 与指定的媒体类型不兼容...
那么...@RequestMapping 中的 produces 属性究竟是做什么的?
最佳答案
“产生”条件表明该方法将返回什么。如果客户端未指定 Accept header ,则不会阻止该方法返回它所能返回的内容。
博客作者在以下网址中针对您的问题发表了一些评论。
http://spring.io/blog/2011/06/13/spring-3-1-m2-spring-mvc-enhancements
关于java - Spring MVC 中@RequestMapping produces 属性的一些信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14266595/