当前位置: 首页 > 知识库问答 >
问题:

Spring4@RequestMapping--消费与头?

桓高澹
2023-03-14

我正在学习如何使用Spring4构建RESTful web服务,但有一点我不清楚,那就是@RequestMapping。我见过使用headers=“accept=application/xml”示例,以及使用consumes(或produces)=“application/xml”的其他示例。

例如,在我自己的@RESTController类中,我有这个函数...

// POST
@RequestMapping(method = RequestMethod.POST, headers = "Accept=application/xml")
public User create(@RequestBody User user) {
    LOG.info("User = " + user.toString());
return userService.create(user);
}

使用headers=“accept=application/xml”与使用consumes=“application/xml”有什么区别?甚至使用headers=“content-type=application/xml”

有人能解释一下头和消费/生产之间的区别,以及它们是何时使用的吗?

共有1个答案

纪正德
2023-03-14

简短回答
在上面的示例中,使用headers=“accept=application/XML”produces=“application/XML”将以相同的方式响应客户机,即用XML表示向客户机发送响应。

较长的回答
i。headers
对于RESTful web服务,客户机(例如您的浏览器)向服务器发送请求(例如GET、POST等),服务器将返回响应。这是一个HTTP事务。请求和响应都有HTTP标头字段(“标头”),它们定义HTTP事务的操作参数(我将客户机请求的标头称为“请求标头”,这些标头不同于服务器响应的标头“响应标头”)。

作为浏览器发送到服务器的请求的一部分,有不同的请求头,一些示例包括AcceptConnectionContent-Length等,这些头都有自己的功能(请参见以下标题的完整列表:https://en.wikipedia.org/wiki/list_of_http_header_fields)。

使用您的代码示例,如果客户机执行POST请求,Spring将检查请求头,如果它发现一个标头accept,其值为application/XML,它将把请求映射到上面的create方法(在您的示例中,服务器将向客户机返回XML响应表示)。

让我修改您提供的代码中的headers元素:

@RequestMapping(method = RequestMethod.POST, headers = "Connection=keep-alive")
public User create(@RequestBody User user) {
 ...
}

注意headers元素现在的值为connection=keep-alive。如果客户机执行POST请求,Spring将检查请求头,如果它发现一个标头connection,其值为keep-alive,它将该客户机请求映射到上面的create方法。

ii.生成和使用
如果将Produces=“application/xml”用于create方法,这意味着只有当客户端的accept标头与application/xml匹配时,客户端请求才映射到create方法。这实质上是客户机在说,“嘿,服务器,我更喜欢接受XML表示的响应,所以用XML向我发送响应”。实际上,produces=“application/XML”也是服务器表示,“嘿,客户机,我只能以XML表示形式为您生成响应,所以我将向您发送该格式”。链接到Spring文档参考。

如果将consumes=“application/xml”用于create方法,这意味着只有当客户端的content-type头与application/xml匹配时,客户端请求才映射到create方法(content-type请求头描述客户端请求的表示形式)。这实质上是服务器在说,“嘿,客户机,我只能使用XML表示的请求,所以请将该格式发送给我”。

摘要
@requestmapping注释中的headers元素可以采用不同的请求头(acceptconnectioncache-control等),但是producte元素只与accept请求头有关,content-type元素只与content-type有关。

 类似资料:
  • 是否有一种方法以编程方式访问和打印使用者滞后偏移,或者说使用者读取的最后一条记录的偏移与某个生产者写入该使用者分区的最后一条记录的偏移之间的位置差。 要知道我的最终目标是将这个值发送到prometheus进行监视,我应该在上面添加哪些语句来得到滞后偏移值?

  • 我花了几个小时想弄清楚发生了什么,但没能找到解决办法。 这是我在一台机器上的设置: 1名zookeeper跑步 我正在使用kafka控制台生成器插入消息。如果我检查复制偏移量(

  • 我有一个Kafka代理,有多个主题,每个主题都有一个分区。 我有一个消费者,它可以很好地使用主题中的消息 我的问题是,我需要通过增加分区的数量来提高消息队列的吞吐量,比如说,我在一个主题上有四个分区,有没有一种方法可以让我编写四个消费者,每个消费者都指向该主题上的各个分区??? }

  • 本文向大家介绍简述消费者与消费组之间的关系相关面试题,主要包含被问及简述消费者与消费组之间的关系时的应答技巧和注意事项,需要的朋友参考一下 消费者从属与消费组,消费偏移以消费组为单位。每个消费组可以独立消费主题的所有数据,同一消费组内消费者共同消费主题数据,每个分区只能被同一消费组内一个消费者消费。

  • 我的应用程序有一个生产者和一个消费者。我的生产者不定期地生成消息。有时我的队列会是空的,有时我会有一些消息。我想让我的消费者监听队列,当有消息在其中时,接受它并处理这条消息。这个过程可能需要几个小时,如果我的消费者没有完成处理当前消息,我不希望他接受队列中的另一条消息。 我认为AKKA和AWS SQS可以满足我的需求。通过阅读文档和示例,akka-camel似乎可以简化我的工作。 我在github

  • 我最近开始学习Kafka,最后就问了这些问题。 > 消费者和流的区别是什么?对我来说,如果任何工具/应用程序消费来自Kafka的消息,那么它就是Kafka世界中的消费者。 流与Kafka有何不同?为什么需要它,因为我们可以使用消费者API编写自己的消费者应用程序,并根据需要处理它们,或者将它们从消费者应用程序发送到Spark? 我做了谷歌对此,但没有得到任何好的答案。抱歉,如果这个问题太琐碎了。