环境:SpringBoot3.2.5
请求参数通过java.util.Optional包装
@GetMapping("/optional")public Object optional(Optional<String> name) { return String.format("请求参数: %s", name.orElse("")) ;}
通过Optional接受参数,效果等同于
public Object optional(@RequestParam(required=false) String name){}
与将required设置为false效果一样(@RequestHeader同样)
在请求参数中你可以使用WebRequest, NativeWebRequest两个任意对象来获取Request,Response,Session等对象。
@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" ;}
当然你可以直接写你需要的具体对象
public Object servletApi(HttpServletRequest req, HttpServletResponse resp) { // ...}
NativeWebRequest本身提供了很多通用的方法,并且还可以获取其它对象,使用起来更加方便。
你的请求参数还可以使用java.security.Principal该对象用来获取当前请求中已经认证过的用户信息。这尤其在使用Spring Security时非常有用,在Security中的Authentication接口实现了Principal。
@GetMapping("/principal")public Object principal(Principal principal) { return principal ;}
输出如下:
图片
你还可以非常方便的获取当前请求Method及Locale等信息。
@GetMapping("/other")public Object other(HttpMethod method, Locale locale) { return method.name() + ", " + locale.toString() ;}// 输出GET, zh_CN
除此之外,你还可以获取时区信息java.util.TimeZone, java.time.ZoneId。
将请求body中的内容以流InputStream形式获取。
@PostMapping("/inputStream")public Object inputStream(InputStream is) throws Exception { return String.format("读取到内容: %s", StreamUtils.copyToString(is, StandardCharsets.UTF_8)) ;}
输出结果:
图片
通过HttpEntity获取请求header及body内容信息;
@PostMapping("/httpentity")public Object httpentity(HttpEntity<String> entity) { return Map.of( "headers", entity.getHeaders(), "body", entity.getBody() ) ;}
输出结果:
图片
如果你想获取当前请求的Schema,Host,Port,上下文,那么你可以通过如下参数获取
@GetMapping("/uri")public Object uri(UriComponentsBuilder builder) { return builder.toUriString() ;}
输出结果:
http://localhost:9001/api。
只包含了schema://host:port/context
如果你的请求是multipart/form-data,那么你可以通过如下方式获取部分请求信息
@PostMapping("/requestpart")public Object requestpart(@RequestPart("user") String user) { return user ;}
请求结果:
图片
你还可以以JSON对象读取,如下:
public Object requestpart(@RequestPart("user") User user)
注意,对象接受时,你需要设置每part的Content-Type
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错误。
指定在发生重定向时使用的属性(即要附加到查询字符串中的属性)以及要在重定向请求期间临时存储的属性。
@PostMapping("/")public String handleFileUpload(RedirectAttributes redirectAttributes) { // 重定向后能够获取到这里指定的属性信息 redirectAttributes.addFlashAttribute("message", "You successfully uploaded file!"); // 重定向 return "redirect:/";}
通过该种方式,重定向后页面中也能获取设置的属性信息。
本文链接:http://www.28at.com/showinfo-26-93507-0.htmlSpringBoot中Controller接口参数还可以这样玩?
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
上一篇: Spring Cloud Gateway中优化Netty线程池,提升系统性能
下一篇: VS Code 常用快捷键大全