Ada dua metode untuk mengakses data ini dengan lebih mudah, tetapi antarmuka tidak menawarkan kemungkinan untuk mendapatkan seluruh URL dengan satu panggilan. Anda harus membuatnya secara manual:
public static String makeUrl(HttpServletRequest request)
{
return request.getRequestURL().toString() + "?" + request.getQueryString();
}
Saya tidak tahu tentang cara melakukan ini dengan fasilitas MVC Spring.
Jika Anda ingin mengakses Permintaan saat ini tanpa meneruskannya ke mana pun, Anda harus menambahkan pendengar di web.xml:
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
Dan kemudian gunakan ini untuk mendapatkan permintaan yang terikat ke Thread saat ini:
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest()
HttpServletRequest
objek tersebut. Ini karena saya menggunakan beberapa kelas / metode pembantu dan saya tidak ingin meneruskan objek permintaan setiap saat.UrlUtils
. Bekerja seperti pesona.Alih-alih menggunakan
RequestContextHolder
secara langsung, Anda juga dapat menggunakanServletUriComponentsBuilder
dan metode statisnya:ServletUriComponentsBuilder.fromCurrentContextPath()
ServletUriComponentsBuilder.fromCurrentServletMapping()
ServletUriComponentsBuilder.fromCurrentRequestUri()
ServletUriComponentsBuilder.fromCurrentRequest()
Mereka menggunakan
RequestContextHolder
di balik terpal, tetapi memberikan fleksibilitas tambahan untuk membuat URL baru menggunakan kemampuanUriComponentsBuilder
.Contoh:
sumber
ConstraintValidator
denganServletUriComponentsBuilder.fromCurrentRequestUri().toUriString();
.Kelas URI Java dapat membantu Anda dalam hal ini:
sumber
dalam file jsp:
sumber
Anda juga dapat menambahkan a
UriComponentsBuilder
ke tanda tangan metode metode pengontrol Anda. Spring akan memasukkan instance pembuat yang dibuat dari permintaan saat ini.Dengan menggunakan pembangun, Anda dapat langsung mulai membuat URI berdasarkan permintaan saat ini, misalnya mengubah segmen jalur.
Lihat juga UriComponentsBuilderMethodArgumentResolver
sumber
UriComponentsBuilder
tidak menyertakan jalur dan parameter kueri dari permintaan tersebut. Jika Anda perlu mengaksesnya, gunakanServletUriComponentsBuilder.fromCurrentRequest()
atauHttpServletRequest
ServletUriComponentsBuilder.fromRequest(request)
Jika Anda memerlukan URL hingga nama host dan bukan jalur, gunakan Lib Umum Apache
StringUtil
, dan dari URL ekstrak substring hingga indexOf ketiga/
.Contoh: Jika fullurl adalah
https://example.com/path/after/url/
maka output akanhttps://example.com
sumber