簡體   English   中英

在我的Spring MVC應用程序中使用HttpServletRequest? 有什么好處?

[英]use HttpServletRequest in my Spring MVC application? Any benefits?

我在我公司的java代碼中遇到了身份驗證代碼。 該應用程序是一組基於Spring MVC構建的REST服務。 在HttpServletRequest對象上的一個名為getHeader()的身份驗證服務中調用了一個方法。 並且該方法檢索AuthId。 為什么他們會在spring MVC應用程序中使用HttpServletRequest? 在spring應用程序中使用此servlet類型代碼有什么好處? 這種方法會做什么? 任何替代品?

Spring MVC構建於Servlet API之上。 你可以使用Servlet做任何事情,因此可以使用Spring MVC。 Spring MVC框架提供的是以特定體系結構樣式編寫Web應用程序代碼的包裝器。 這個包裝器增加了行為,有時簡化了任務。

為什么他們會在spring MVC應用程序中使用HttpServletRequest?

在這種情況下,因為它是獲取標頭的最直接方式。

在spring應用程序中使用此servlet類型代碼有什么好處?

Spring不需要包裝任何東西。 你直接從源頭獲得它。

這種方法會做什么?

閱讀javadoc。

任何替代品?

@Controller類的處理程序方法中,您可以聲明一個使用@RequestHeader注釋的參數,並讓Spring傳遞一個它從HttpServletRequest頭中檢索的參數。

默認情況下,這僅限於使用@RequestMapping注釋的@Controller方法。 如果您的服務類是HandlerInterceptorFilter或其他類型的類,並且只是對HttpServletRequest對象的引用,那么除了使用getHeader(String)直接檢索它之外,您無能為力。

Spring MVC在HttpServletRequest之上提供了許多精彩的抽象,因此您可以避免其低級實現細節。 您很少需要直接訪問它。

例如,您可以獲得類似Content-Type的標頭值,如下所示:

@GET
@Path("/myService")
public Response doSomething(@HeaderParam("Content-Type") String contentType) {
...
}

但有時您確實需要直接訪問HttpServletRequest - 通常在您使用另一個需要它的API時。 如果您正在使用其他需要HttpServletRequest的方法的其他庫,那么您必須直接從Spring MVC中獲取它。

例如,在此隨機UrlUtil 類中查看此方法:

public static String encodeUrlPathSegment(String pathSegment, HttpServletRequest httpServletRequest) {
//Get a path segment
}

你別無選擇,只能從Spring MVC中獲取HttpServletRequest

這是另一種選擇:Spring MVC定義參數注釋@RequestHeader來讀取httpServletRequest頭:

@RequestMapping(...)
public @ResponseBody String myMethod(@RequestHeader String AuthId){
    //the value of the parameter AuthId is the value of request header named AuthId
    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM