RequestContextHolder 的使用
// RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
// currentRequestAttributes 避免 null 提示
RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
// 获取请求体 request
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
// 获取响应体 response
HttpServletResponse response = ((ServletRequestAttributes) requestAttributes).getResponse();
// 获取请求头 headers
Enumeration<String> headerNames = request.getHeaderNames();
// 根据请求体参数从 request 中获取 header 请求头值
Map<String, String> headers = new HashMap<>();
if (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
headers.put(name, request.getHeader(name));
}
获取请求头 Header 两种方式
1. 从 HttpServletRequest 对象中获取
// 1、获取单个
String token = request.getHeader("token");
// 2、获取所有
Enumeration<String> headerNames = request.getHeaderNames();
Map<String, String> headers = new HashMap<>();
if (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
headers.put(name, request.getHeader(name));
}
2. 使用 @RequestHeader 注解
// 1、获取单个
@PostMapping(value = "/test/header")
public void post(@RequestHeader(value="token") String token) {
// ...
}
// 2、获取所有
@PostMapping(value = "/test/header")
public void post(@RequestHeader Map<String, String> headers) {
// ...
}
获取POST请求Body参数3种方法
1. request.getInputStream()
/**
* If the parameter data was sent in the request body, such as occurs
* with an HTTP POST request, then reading the body directly via
* @see javax.servlet.ServletRequest#getInputStream or
* @see javax.servlet.ServletRequest#getReader
* @param request HttpServletRequest
* @return String
*/
public static String getPostData(HttpServletRequest request) {
try (InputStream is = request.getInputStream()) {
return IOUtils.toString(is, StandardCharsets.UTF_8);
} catch (IOException ex) {
throw new OpenException("read http request body failed.", ex);
}
}
2.@RequestBody
@PostMapping("post")
@ResponseBody
public String batchDisabledUsers(@RequestBody xxxDTO xx) {
}
3. @RequestParam
@PostMapping("/test")
@ResponseBody
public StringTestUrl(@RequestParam("username")String username,
@RequestParam("password")String password) {
String txt = username + password;
return txt;
}