java - Spring MVC 中@RequestMapping produces 属性的一些信息

标签 java spring spring-mvc annotations

在 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 元素有关...

阅读此处:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html

说: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/

相关文章:

Java无法解析迄今为止的字符串

java - OS X Gatekeeper 的代码签名 Java 应用程序

spring - EmbeddedKafka如何在单元测试中检查收到的消息

java - 无法使用请求的结果类型为具有多个返回的查询创建 TypedQuery

java - RestClient 抛出 NullPointerException?

java - 如何从jdbc用户服务获取用户信息

java - 字节数组(十六进制)转换为 Int 问题。 ( Kotlin /Java)

java - Recurcison Java 奇怪的行为,打印节点

java - @NamedNativeQuery + @SqlResultSetMapping + @ConstructorResult + @ColumnResult 导致 classCastException

java - 与 Springs @ModelAttribute 注释的命名约定混淆