[英]How do I get the HTTPServletRequest in Springboot application
要獲取請求 URL,請在堆棧溢出中找到以下方法。
第一種方法:
@Autowired
private HttpServletRequest request;
public void getURL(){
String url=request.getRequestURL().toString();
}
第二種方法:
public void getURL(){
String url=ServletUriComponentsBuilder.fromCurrentRequestUri().toUriString();
}
第三種方法:
public void getURL(){
HttpServletRequest request=
((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
String url=request.getRequestURL().toString();
}
我很困惑在 Spring Boot 應用程序中使用哪一個來獲取請求 URL。
如果我采用第三種方法,那么我是否需要在 Configuration 類中創建 RequestContextListener 的 bean,如下所示?
@Bean
public RequestContextListener requestContextListener(){
return new RequestContextListener();
}
其實很簡單。 創建一個注釋為@RestController
的類,並在其中創建一個處理映射的方法。 在該方法中列出HttpServletRequest request
作為您的參數。 就是這樣,在這種方法中,您將獲得它作為參數並可以使用它。 下面是我的一個工作示例,它就是這樣做的。
@RestController
@RequestMapping("/upload")
public class UploadTestController {
@PostMapping
public ResponseEntity<String> uploadTest(HttpServletRequest request) {
try {
String lengthStr = request.getHeader("content-length");
int length = TextUtils.parseStringToInt(lengthStr, -1);
if(length > 0) {
byte[] buff = new byte[length];
ServletInputStream sis =request.getInputStream();
int counter = 0;
while(counter < length) {
int chunkLength = sis.available();
byte[] chunk = new byte[chunkLength];
sis.read(chunk);
for(int i = counter, j= 0; i < counter + chunkLength; i++, j++) {
buff[i] = chunk[j];
}
counter += chunkLength;
if(counter < length) {
TimeUtils.sleepFor(5, TimeUnit.MILLISECONDS);
}
}
Files.write(Paths.get("C:\\Michael\\tmp\\testPic.jpg"), buff);
}
} catch (Exception e) {
System.out.println(TextUtils.getStacktrace(e));
}
return ResponseEntity.ok("Success");
}
}
在springboot中,如果使用@Restcontroller,則HttpServletRequest已經存在於controler方法的第一個參數中
@PostMapping(value = "/abc")
public ResponseEntity<?> abcMethod(HttpServletRequest req){
// Do anything with HttpServletRequest here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.