gpt4 book ai didi

java - Spring 4 @RequestMapping - 消耗 vs header ?

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

我正在学习如何使用 Spring 4 构建 RESTful Web 服务,而我不清楚的一件事是在 @RequestMapping 中。我见过使用 headers = "Accept=application/xml" 的示例和使用消耗(或生成)= "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" 与使用消耗 = "application/xml"有什么区别? 甚至使用 headers = "content-type=application/xml"?

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

最佳答案

简短回答
在上面的示例中,使用 headers = "Accept=application/xml"produces = "application/xml" 都将以相同的方式响应客户端,即发送使用 XML 表示对客户端的响应。

更长的答案
我。标题
对于 RESTful Web 服务,客户端(例如您的浏览器)向服务器发送请求(例如 GET、POST 等),服务器将返回响应。这是一个 HTTP 事务。请求和响应都有 HTTP header 字段(“headers”),它定义了 HTTP 事务的操作参数(我将客户端请求的 header 称为“请求 header ”,这些与来自服务器响应的 header “响应”不同)标题")。

作为浏览器向服务器发送请求的一部分,有不同的请求 header ,一些示例包括 AcceptConnectionContent-Length 等等,并且每个标题都有自己的功能(请参阅此处的完整标题列表:https://en.wikipedia.org/wiki/List_of_HTTP_header_fields)。

使用您的代码示例,如果客户端发出 POST 请求,Spring 将检查请求 header ,如果它发现 header 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 将检查请求 header ,如果它发现 header Connection 的值为 keep-alive,它将映射该 header 客户端对上述create方法的请求。

ii.生产和消费
如果您使用 produces="application/xml" 作为 create 方法,这意味着客户端请求仅映射到 create 方法,如果客户端的 Accept header 匹配 application/xml。这实质上是客户端说,“嘿,服务器,我更愿意接受您以 XML 表示形式的响应,所以将您的响应以 XML 形式发送给我”。实际上,produces="application/xml" 也是服务器在说,“嘿客户端,我只能以 XML 表示形式为您生成响应,所以我将向您发送该格式”。 Link to Spring documentation reference .

如果您使用 consumes="application/xml" 作为 create 方法,这意味着客户端请求仅映射到 create如果客户端的 Content-Type header 与 application/xml 匹配,则方法(Content-Type 请求 header 描述客户端请求的表示形式) .这实质上是服务器在说,“嘿,客户端,我只能使用 XML 表示的请求,所以将该格式发送给我”。

摘要
@RequestMapping 注释中的 headers 元素可以采用不同的请求 header (AcceptConnectionCache -Control 等),但 produces 元素只关心 Accept 请求头,而 consumes 元素只关心带有 Content-Type 请求 header 。

关于java - Spring 4 @RequestMapping - 消耗 vs header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30923249/

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