当前位置:首页 > 科技  > 软件

SpringBoot中Controller接口参数还可以这样玩?

来源: 责编: 时间:2024-06-13 08:48:40 235观看
导读环境:SpringBoot3.2.51. Optional包装参数请求参数通过java.util.Optional包装@GetMapping("/optional")public Object optional(Optional<String> name) { return String.format("请求参数: %s", name.orElse("")) ;

环境:SpringBoot3.2.5uxe28资讯网——每日最新资讯28at.com

1. Optional包装参数

请求参数通过java.util.Optional包装uxe28资讯网——每日最新资讯28at.com

@GetMapping("/optional")public Object optional(Optional<String> name) {  return String.format("请求参数: %s", name.orElse("")) ;}

通过Optional接受参数,效果等同于uxe28资讯网——每日最新资讯28at.com

public Object optional(@RequestParam(required=false) String name){}

与将required设置为false效果一样(@RequestHeader同样)uxe28资讯网——每日最新资讯28at.com

2. 便捷获取Servlet API

在请求参数中你可以使用WebRequest, NativeWebRequest两个任意对象来获取Request,Response,Session等对象。uxe28资讯网——每日最新资讯28at.com

@GetMapping("/servlet/api")public Object servletApi(WebRequest request, NativeWebRequest webRequest) {  String name = request.getParameter("name") ;  // 获取Servlet API  HttpServletRequest req = webRequest.getNativeRequest(HttpServletRequest.class) ;  HttpServletResponse resp = webRequest.getNativeResponse(HttpServletResponse.class) ;  HttpSession session = webRequest.getNativeRequest(HttpSession.class) ;  return "servlet api" ;}

当然你可以直接写你需要的具体对象uxe28资讯网——每日最新资讯28at.com

public Object servletApi(HttpServletRequest req,   HttpServletResponse resp) {  // ...}

NativeWebRequest本身提供了很多通用的方法,并且还可以获取其它对象,使用起来更加方便。uxe28资讯网——每日最新资讯28at.com

3. 获取当前认证用户

你的请求参数还可以使用java.security.Principal该对象用来获取当前请求中已经认证过的用户信息。这尤其在使用Spring Security时非常有用,在Security中的Authentication接口实现了Principal。uxe28资讯网——每日最新资讯28at.com

@GetMapping("/principal")public Object principal(Principal principal) {  return principal ;}

输出如下:uxe28资讯网——每日最新资讯28at.com

图片图片uxe28资讯网——每日最新资讯28at.com

4. 获取请求其它信息

你还可以非常方便的获取当前请求Method及Locale等信息。uxe28资讯网——每日最新资讯28at.com

@GetMapping("/other")public Object other(HttpMethod method, Locale locale) {  return method.name() + ", " + locale.toString() ;}// 输出GET, zh_CN

除此之外,你还可以获取时区信息java.util.TimeZone, java.time.ZoneId。uxe28资讯网——每日最新资讯28at.com

5. 读取输入流

将请求body中的内容以流InputStream形式获取。uxe28资讯网——每日最新资讯28at.com

@PostMapping("/inputStream")public Object inputStream(InputStream is) throws Exception {  return String.format("读取到内容: %s",     StreamUtils.copyToString(is, StandardCharsets.UTF_8)) ;}

输出结果:uxe28资讯网——每日最新资讯28at.com

图片图片uxe28资讯网——每日最新资讯28at.com

6. 获取Header&Body

通过HttpEntity获取请求header及body内容信息;uxe28资讯网——每日最新资讯28at.com

@PostMapping("/httpentity")public Object httpentity(HttpEntity<String> entity) {  return Map.of(    "headers", entity.getHeaders(),     "body", entity.getBody()  ) ;}

输出结果:uxe28资讯网——每日最新资讯28at.com

图片图片uxe28资讯网——每日最新资讯28at.com

7. 获取当前请求URI

如果你想获取当前请求的Schema,Host,Port,上下文,那么你可以通过如下参数获取uxe28资讯网——每日最新资讯28at.com

@GetMapping("/uri")public Object uri(UriComponentsBuilder builder) {  return builder.toUriString() ;}

输出结果:uxe28资讯网——每日最新资讯28at.com

uxe28资讯网——每日最新资讯28at.com

http://localhost:9001/api。uxe28资讯网——每日最新资讯28at.com

uxe28资讯网——每日最新资讯28at.com

只包含了schema://host:port/contextuxe28资讯网——每日最新资讯28at.com

8. 获取请求的部分

如果你的请求是multipart/form-data,那么你可以通过如下方式获取部分请求信息uxe28资讯网——每日最新资讯28at.com

@PostMapping("/requestpart")public Object requestpart(@RequestPart("user") String user) {  return user ;}

请求结果:uxe28资讯网——每日最新资讯28at.com

图片图片uxe28资讯网——每日最新资讯28at.com

你还可以以JSON对象读取,如下:uxe28资讯网——每日最新资讯28at.com

public Object requestpart(@RequestPart("user") User user)

注意,对象接受时,你需要设置每part的Content-Typeuxe28资讯网——每日最新资讯28at.com

Content-Type: multipart/mixed--edt7Tfrdusa7r3lNQc79vXuhIIMlatb7PQg7VpContent-Disposition: form-data; name="user"Content-Type: application/json; charset=UTF-8Content-Transfer-Encoding: 8bit{  "age": 20,  "name": "张三"}

没有设置Content-Type将会抛出415错误。uxe28资讯网——每日最新资讯28at.com

9.重定向保存属性

指定在发生重定向时使用的属性(即要附加到查询字符串中的属性)以及要在重定向请求期间临时存储的属性。uxe28资讯网——每日最新资讯28at.com

@PostMapping("/")public String handleFileUpload(RedirectAttributes redirectAttributes) {  // 重定向后能够获取到这里指定的属性信息  redirectAttributes.addFlashAttribute("message", "You successfully uploaded file!");  // 重定向  return "redirect:/";}

通过该种方式,重定向后页面中也能获取设置的属性信息。uxe28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-93507-0.htmlSpringBoot中Controller接口参数还可以这样玩?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Spring Cloud Gateway中优化Netty线程池,提升系统性能

下一篇: VS Code 常用快捷键大全

标签:
  • 热门焦点
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • 如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • 电视息屏休眠仍有网络上传 爱奇艺被质疑“薅消费者羊毛”

    记者丨宁晓敏 见习生丨汗青出品丨鳌头财经(theSankei) 前不久,爱奇艺发布了一份亮眼的一季报,不仅营收和会员营收创造历史最佳表现,其运营利润也连续6个月实现增长。自去年年初
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己&ldquo;当家&rdquo;的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • AI芯片初创公司Tenstorrent获三星和现代1亿美元投资

    Tenstorrent是一家由芯片行业资深人士Jim Keller领导的加拿大初创公司,专注于开发人工智能芯片,该公司周三表示,已经从现代汽车集团和三星投资基金等
  • OPPO K11样张首曝:千元机影像“卷”得真不错!

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
  • 质感不错!OPPO K11渲染图曝光:旗舰IMX890传感器首次下放

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
  • 与兆芯合作 联想推出全新旗舰版笔记本电脑开天N7系列

    联想与兆芯合作推出全新联想旗舰版笔记本电脑开天 N7系列。这个系列采用兆芯KX-6640MA处理器平台,KX-6640MA 处理器是采用了陆家嘴架构,16nm 工艺,4 核 4 线
Top