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

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

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

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

1. Optional包装参数

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

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

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

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

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

2. 便捷获取Servlet API

在请求参数中你可以使用WebRequest, NativeWebRequest两个任意对象来获取Request,Response,Session等对象。QjP28资讯网——每日最新资讯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" ;}

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

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

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

3. 获取当前认证用户

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

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

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

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

4. 获取请求其它信息

你还可以非常方便的获取当前请求Method及Locale等信息。QjP28资讯网——每日最新资讯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。QjP28资讯网——每日最新资讯28at.com

5. 读取输入流

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

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

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

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

6. 获取Header&Body

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

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

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

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

7. 获取当前请求URI

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

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

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

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

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

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

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

8. 获取请求的部分

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

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

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

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

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

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

注意,对象接受时,你需要设置每part的Content-TypeQjP28资讯网——每日最新资讯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错误。QjP28资讯网——每日最新资讯28at.com

9.重定向保存属性

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

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

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

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

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

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

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

标签:
  • 热门焦点
Top