SpringBoot构建Restful service完成Get和Post请求

发布时间 - 2026-01-11 02:50:40    点击率:

一个基本的RESTfule service最进场向外提供的请求Method就是Get和Post。

在Get中,常用的都会在请求上带上参数,或者是路径参数。响应Json。

在Post中,常用的会提交form data或者json data作为参数,响应Json。

1. Get请求,url传参,返回json。

先准备一个请求后,响应的对象。

package com.example.demo;
public class Echo {
  private final long id;
  private final String content;
  public Echo(long id, String content) {
    this.id = id;
    this.content = content;
  }
  public long getId() {
    return this.id;
  }
  public String getContent() {
    return this.content;
  }
}

准备一个用来接收请求的EchoController(名字可以根据实际情况写),为它增加@RestController注解,表示这是一个处理RESTful请求的响处理类。

增加@RequestMapping,为本Controller提供一个根url,当然可以不写,写这个是为了更好的将同一种处理的url归在一类,本Controller其他的处理方法对应的url中就不需要重复写。

package com.example.demo;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ModelAttribute;
@RestController
@RequestMapping("/echo")
public class EchoController {
  private static final String echoTemplate1 = "received %s!";
  private static final String echoTemplate2 = "%s speak to %s \'%s\'";
  private final AtomicLong counter = new AtomicLong();
  @RequestMapping(value="/getter/pattern1", method=RequestMethod.GET)
  public Echo getterPattern1(String content) {
    return new Echo(counter.incrementAndGet(), String.format(echoTemplate1, content));
  }
  @RequestMapping(value="/getter/pattern2", method=RequestMethod.GET)
  public Echo getterPattern2(@RequestParam(value="content", required=false) String alias) {
    return new Echo(counter.incrementAndGet(), String.format(echoTemplate1, alias));
  }
}

getterPattern1的上面增加了@RequestMapping注解,将指定的url和处理的方法进行映射,对应这个url的请求就由该方法来处理,method可以省略,省略后就是对应所有的Http Metho,gtterPatten1方法的参数默认就和url中的content参数进行映射。

再看getterPattern2,跟上面的方法效果一致,他们的区别就在于参数定义用了@RequestParam注解将url参数和方法参数进行了映射说明,@RequesteParam中value的值就是url中实际的参数,required说明该参数是否必须,如果是true,而实际上url中并没有带上该参数,那么会报异常,为防止异常可以增加defaultValue指定参数的默认值即可。我们会发现这里的方法参数是alias,这里当然是可以和url的参数名不同,只要RequestParam注解映射了他们的关系就没问题。

运行后,可以在浏览器中访问对应的url来看看结果,我这里是用curl来访问。

curl http://localhost:8080/echo/getter/pattern1?content=hello
curl http://localhost:8080/echo/getter/pattern2?content=hello

 上面两个url的访问得到的结果除了id会自增外,其他是一致的:

{"id":6,"content":"received hello!"} 

 2. Get请求,传递url路径参数,返回json。

在EchoController中增加一个响应方法。

  @RequestMapping(value="/getter/pattern3/{content}", method=RequestMethod.GET)
  public Echo getterPattern3(@PathVariable String content) {
    return new Echo(counter.incrementAndGet(), String.format(echoTemplate1, content));
  }

可以看到,在@RequestMapping的url定义中的末尾有“{content}”,表明这里是一个路径参数,在getterPattern3的参数content增加了@PathVariable注解,将方法参数与路径参数进行了映射。

运行后,访问url。

curl http://localhost:8080/echo/getter/pattern3/123456

结果:

{"id":8,"content":"received 123456!"}

3.Post请求,参数以Http body的途径提交Json数据。

先定义一个提交的Json对应的对象,这里把它定义为Message。

package com.example.demo;
public class Message {
  private String from;
  private String to;
  private String content;
  public Message() {}
  public String getFrom() {
    return this.from;
  }
  public String getTo() {
    return this.to;
  }
  public String getContent() {
    return this.content;
  }
  public void setFrom(String value) {
    this.from = value;
  }
  public void setTo(String value) {
    this.to = value;
  }
  public void setContent(String value) {
    this.content = value;
  }
}

在EchoController增加响应的方法,并完成映射。

  @RequestMapping(value="/setter/message1", method=RequestMethod.POST)
  public Echo setterMessage1(@RequestBody Message message) {
    return new Echo(counter.incrementAndGet(), String.format(echoTemplate2, message.getFrom(), message.getTo(), message.getContent()));
  }

在setterMessage1方法的参数中用@RequestBody将请求的Http Body和参数messge进行了映射。

运行后,使用curl向服务端提交json数据。提交的请求头部要带上"Content-Type:application/json",表明请求体Json。

curl -i -H "Content-Type:application/json" -d "{\"from\":\"Tom\",\"to\":\"Sandy\",\"content\":\"hello buddy\"}" http://localhost:8080/echo/setter/message1

结果:

{"id":9,"content":"Tom speak to Sandy 'hello buddy'"}

4.Post请求,参数以Http body的途径提交表单数据。

在EchoController增加响应的方法,并完成映射。

  @RequestMapping(value="/setter/message2", method=RequestMethod.POST)
  public Echo setterMessage2(@ModelAttribute Message message) {
    return new Echo(counter.incrementAndGet(), String.format(echoTemplate2, message.getFrom(), message.getTo(), message.getContent()));
  }

 在setterMessage2方法的参数中用@ModelAttribute将请求的Http Body中的表单数据和参数messge进行了映射。

运行后,使用curl向服务端提交表单数据。提交的请求头部要带上"Content-Type:application/x-www-form-urlencoded",表明请求体是表单数据,格式是"key1=value1&key2=value2&key3=value3"。

curl -i -H "Content-Type:application/x-www-form-urlencoded" -d "from=sandy&to=aissen&content=go to" http://localhost:8080/echo/setter/message2

 结果:

{"id":11,"content":"sandy speak to aissen 'go to'"}

总结

以上所述是小编给大家介绍的SpringBoot构建Restful service完成Get和Post请求,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# spring  # boot  # 构建restful  # service  # get  # post  # Springboot GET和POST请求参数获取方式小结  # springboot如何接收get和post请求参数  # SpringBoot常见get/post请求参数处理、参数注解校验及参数自定义注解校验详解  # SpringBoot RestTemplate GET POST请求的实例讲解  # springboot注解及GET、POST接口写法  # 表单  # 进行了  # 他们的  # 会报  # 要带  # 小编  # 服务端  # 增加了  # 是一个  # 他是  # 在此  # 不需要  # 其他的  # 会在  # 把它  # 这是一个  # 就没  # 用了  # 给大家  # 或者是 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 个人摄影网站制作流程,摄影爱好者都去什么网站?  如何为不同团队 ID 动态生成多个非值班状态按钮  详解Oracle修改字段类型方法总结  微信小程序 HTTPS报错整理常见问题及解决方案  中国移动官方网站首页入口 中国移动官网网页登录  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  Laravel如何优化应用性能?(缓存和优化命令)  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  如何在阿里云ECS服务器部署织梦CMS网站?  javascript中的try catch异常捕获机制用法分析  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  微信推文制作网站有哪些,怎么做微信推文,急?  Laravel如何使用Vite进行前端资源打包?(配置示例)  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Laravel怎么使用artisan命令缓存配置和视图  如何在万网主机上快速搭建网站?  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  高端企业智能建站程序:SEO优化与响应式模板定制开发  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  Laravel如何记录自定义日志?(Log频道配置)  Laravel PHP版本要求一览_Laravel各版本环境要求对照  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  Laravel如何为API编写文档_Laravel API文档生成与维护方法  Laravel如何实现API版本控制_Laravel版本化API设计方案  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  如何实现javascript表单验证_正则表达式有哪些实用技巧  郑州企业网站制作公司,郑州招聘网站有哪些?  Laravel如何处理异常和错误?(Handler示例)  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  Laravel怎么清理缓存_Laravel optimize clear命令详解  如何用腾讯建站主机快速创建免费网站?  如何用y主机助手快速搭建网站?  *服务器网站为何频现安全漏洞?  中山网站推广排名,中山信息港登录入口?  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  高防服务器租用如何选择配置与防御等级?  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  百度浏览器如何管理插件 百度浏览器插件管理方法  如何生成腾讯云建站专用兑换码?  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法