Pertanyaan Spring: bagaimana cara saya menyuntikkan HttpServletRequest ke kacang bertopi permintaan?


Saya mencoba menyiapkan kacang bertulang permintaan di musim semi.

Saya telah berhasil mengaturnya sehingga kacang dibuat satu kali per permintaan. Sekarang, perlu mengakses objek HttpServletRequest.

Karena kacang dibuat sekali per permintaan, saya pikir wadah dapat dengan mudah menyuntikkan objek permintaan di kacang saya. Bagaimana saya bisa melakukannya?


75
2017-07-23 17:16


asal


Jawaban:


Biji bertulang permintaan dapat diberikan secara otomatis dengan objek permintaan.

private @Autowired HttpServletRequest request;

81
2017-07-24 07:27



Spring mengekspos arus HttpServletRequest objek (serta arus HttpSession objek) melalui pembungkus objek tipe ServletRequestAttributes. Objek wrapper ini terikat ke ThreadLocal dan diperoleh dengan memanggil static metode RequestContextHolder.currentRequestAttributes().

ServletRequestAttributes menyediakan metode getRequest() untuk mendapatkan permintaan saat ini, getSession() untuk mendapatkan sesi saat ini dan metode lain untuk mendapatkan atribut yang tersimpan di kedua cakupan. Kode berikut, meskipun sedikit jelek, seharusnya membuat Anda objek permintaan saat ini di mana saja dalam aplikasi:

HttpServletRequest curRequest = 
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
.getRequest();

Perhatikan bahwa RequestContextHolder.currentRequestAttributes() metode mengembalikan antarmuka dan perlu di-typecast ServletRequestAttributes yang mengimplementasikan antarmuka.


Spring Javadoc:  RequestContextHolder | ServletRequestAttribut


110
2017-07-24 01:00