在 Spring 中处理 POST 请求的 REST 方法到底是如何工作的?

2024-04-15

我正在学习 Spring Core 认证,我对 Spring MVC 中 **RESTful webapp* 的练习有一些疑问。

因此,在示例中,我使用以下方法创建一个新的Account object

/**
 * Creates a new Account, setting its URL as the Location header on the
 * response.
 */
@RequestMapping(value = "/accounts", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
public HttpEntity<String> createAccount(@RequestBody Account newAccount,
        @Value("#{request.requestURL}") StringBuffer url) {
    Account account = accountManager.save(newAccount);

    return entityWithLocation(url, account.getEntityId());
}

我知道:

  1. @RequestMapping注解,在本例中,指定该方法句柄POSTHttpRequest 朝向/账户资源。我知道它使用POST请求,因为根据 REST 风格,POST“动词”意味着必须创建新资源。

  2. 我认为这个注释:

     @ResponseStatus(HttpStatus.CREATED)
    

    意味着当方法正确结束时(当Http响应发送给客户端)它把201 (CREATED) 到 HttpResponse 状态字段中。所以它表明新对象的创建已经成功。这是真的还是我错过了什么?

  3. 该方法的第一个参数是:

    @RequestBody Account newAccount
    

    阅读文档后,我发现该参数与 Web 请求的正文相关。请求正文通过 HttpMessageConverter 传递,以根据请求的内容类型解析方法参数。

    那么,到底是什么意思呢?我认为这意味着进入body我的 HttpRequest 我有 JSON 格式的 Account 对象,并且使用 Jackson 将其转换为经典AccountJava 对象。这是正确的还是我错过了什么?

  4. 该方法的第二个参数是:

    @Value("#{request.requestURL}") StringBuffer url

    到底是什么意思?

  5. 然后该方法将获得的对象保存到数据库中。

  6. 最后返回:

    return entityWithLocation(url, account.getEntityId());
    

    但到底是什么意思呢?什么正在返回?哪里?结果没有进入HttpResponse?

EDIT 1:

The 实体与位置()方法与前一个方法在同一个类中定义,这是它的代码:

private HttpEntity<String> entityWithLocation(StringBuffer url,
        Object resourceId) {
    // Configure and return an HttpEntity object - it will be used to build
    // the HttpServletResponse
    HttpHeaders headers = new HttpHeaders();
    headers.setLocation(getLocationForChildResource(url, resourceId));
    return new HttpEntity<String>(headers);
}

以下是我对你的问题的理解。

  1. @RequestBody Account newAccount

关于这一点,您的理解是正确的。

  1. @Value("#{request.requestURL}") StringBuffer url

相当于request.getRequestURL();看API http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#getRequestURL()

  1. entityWithLocation(url, account.getEntityId())

根据该方法内的代码。 它返回HttpEntity对象,代表http请求或响应实体(which includes headers and body),在你的情况下是response。 在方法内部,您添加了location of resource(account)创建的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Spring 中处理 POST 请求的 REST 方法到底是如何工作的? 的相关文章

随机推荐

  • 如何在 Swift 中创建一个空数组?

    我对如何在 Swift 中创建空数组感到非常困惑 您能否向我展示创建带有一些细节的空数组的不同方法 干得好 var yourArray String 上面的方法也适用于其他类型 而不仅仅是字符串 这只是一个例子 为其添加价值 我想您最终会想
  • app.dock.hide(); 的等效项是什么?

    我目前正在开发电子托盘应用程序 对于 Mac Electron 框架具有将应用程序隐藏在 Dock 中的功能 app dock hide 我尝试在 Windows 计算机上运行此程序并收到错误 TypeError Cannot read p
  • “内部联系”是什么意思?

    标准中写道 当名称具有内部链接时 它所表示的实体可以是 由同一翻译单元中其他范围的名称引用 and 具有命名空间范围 3 3 6 的名称具有内部链接 如果它是 变量 函数或函数模板的名称 显式声明为静态 所以考虑下面的代码 include
  • s3 存储桶中的 utf-8 文件名

    是否可以使用 utf 8 编码名称 如 jpg 向 s3 添加密钥 使用 boto 上传时出现以下错误
  • Python 请求:requests.exceptions.TooManyRedirects:超过 30 个重定向

    我试图使用 python requests 库抓取此页面 import requests from lxml import etree html url http www amazon in b ref sa menu mobile ele
  • 使用 MongoDB 有效确定层次结构中记录的所有者

    我正在努力实现以下目标 选择我拥有的所有记录 其中所有权是我创建的对象或我管理的用户创建的对象 其中用户管理可以在管理用户的用户层次结构中 所有权显然很简单 可以通过与所有者相对应的简单 ID 来处理 用户管理的层次结构让我有点难以执行 而
  • 当 Net Framework 引用 Net 标准库时,无法加载文件或程序集

    我对 netstandard 非常陌生 当我想运行引用 netstandard 库的 Net Framework 控制台 调试模式时 我刚刚遇到异常 所以我后来发现 如果我将 nuget 中的 System IO Ports 安装到 Net
  • 如何在某一点切断一条线,但在最近的空间处分割

    我希望每行在 20 个字符过去后分开 但我希望它在最近的空格处分开 这样句子就只有整个单词 这是我的代码 System out println Please input a word Scanner stringScanner new Sc
  • 如何获取PAC的访问日志(代理自动配置)

    我正在使用 Chrome 我想为自己监控浏览器访问日志 我怀疑某些扩展程序在后台发送 url 等 我尝试使用 Privoxy 但它无法记录 HTTPS url 我认为 PAC 是记录原始 url 的唯一方法 我使用 PAC 几年了 但我仍然
  • 如何使用 django-pytest 跟踪 Django 重定向?

    在设置一个档案索引视图 https docs djangoproject com en 2 0 ref class based views generic date based django views generic dates Arch
  • 文件包含\u00c2\u00a0,转换为字符

    我有一个 JSON 文件 其中包含这样的文本 wax and voila u00c2 u00a0At the moment you can t use our 我的简单问题是如何将这些 u 代码转换 而不是删除 为空格 撇号等 Input
  • ANTLR 语法也可以识别数字键和整数

    我正在尝试创建一个 ANTLR 语法来解析可选地具有重复计数的键序列 例如 a b c r5 表示 重复键 a b 和 c 五次 我有语法工作KEYS a z A Z 但是当我尝试添加数字键时KEYS a z A Z 0 9 输入表达式如
  • URL 中的 HTML5 不明确的 & 符号

    The W3C 验证器 http validator w3 org 在我的一些 URL 中引发了有关 符号的错误 例如 根据HTML5 规范 http www whatwg org specs web apps current work m
  • 如何计算给定日期Android的周数

    我正在尝试从给定日期获取当前周数 即 如果我输入日期为 01 03 2013 那么我应该得到周数 9 请帮助我找到解决方案 Thanks 阿布舍克 您可以为该日期创建一个 Calendar 对象并通过以下方式获取星期 calendar ge
  • if 语句在循环内部还是外部?

    如果我这样做会更好吗 foreach my item array if bool code else code or if bool foreach my item array else foreach my item array 我会离开
  • 有关 URLEncoder 和 URLDecoder 的一些问题?

    我已经浏览了 URLEncoder 和 URLDecoder 的 javadocs 然后就更加好奇了 将服务器视为 tomcat 在任何 Web 应用程序中 每当我们提交时 表单 服务器将表单字段转换为 urlencoded 字段 当我们执
  • 邮件与发送邮件

    我正在 Codeigniter 中使用 Email 类 并且在manual http codeigniter com user guide libraries email html我看到有 3 个协议可以使用 mail sendmail 和
  • 如何获取调用方法的类?

    The get calling class函数必须通过返回调用该函数的方法的类来通过以下测试A f method class A def f self return get calling class class B A def g sel
  • 序列化数组列表

    现在我想知道你们是否可以帮助我将 ArrayList 序列化到文件中 现在我正在做一份学校的总结 但是我没有遇到真正的编码问题 我正在制作的是一个 GUI 地址簿 当用户添加地址时 它会存储到数组列表中并添加到组合框中 这就是我正在做的事情
  • 在 Spring 中处理 POST 请求的 REST 方法到底是如何工作的?

    我正在学习 Spring Core 认证 我对 Spring MVC 中 RESTful webapp 的练习有一些疑问 因此 在示例中 我使用以下方法创建一个新的Account object Creates a new Account s