@Autowired HttpServletResponse

Sto cercando un modo per autowire HttpServletResponse. Non funziona con la primavera, fuori dalla scatola, ma ho trovato questa descrizione. Questo funziona, ma è una sorta di fastidioso, in quella primavera, ovviamente, ha un meccanismo per rendere gli oggetti scope richiesta (cioè HttpServletRequest) e questo sembra essere un hack imbullonate sulla parte superiore.

C’è un modo per agganciare lo stesso meccanismo che la primavera utilizza per HttpServletRequest? E, qualche idea del perché spring team ha deciso di fare solo HttpServletRequest autowire in grado (ed escluse HttpServletResponse)?

InformationsquelleAutor Kevin | 2011-08-08

 

2 Replies
  1. 9

    Forse c’è qualche soluzione alternativa, ma non è così ovvio, perché non è il modo in cui è destinata ad essere. Spring MVC è singleton @Controller fagioli che forniscono @RequestMapping metodi che prendono la richiesta e la risposta come argomenti.

    Se avete bisogno di risposta in un altro luogo (il livello di servizio) – non farlo. La risposta non dovrebbe andare oltre il web (controller) livello.

    Per iniettare la risposta, è necessario:
    – per memorizzare la risposta in un ThreadLocal
    – per effettuare una fabbrica di fagiolo che restituisce la risposta corrente

    Circa il codice di esempio che hai mostrato – non sono sicuro se non si sta per bisogno della fabbrica bean per restituire un proxy (in attuazione HttpServletResponse), che a sua volta restituire la risposta corrente. E diventa piuttosto complicato.

    Ma alla fine – si consiglia di non farlo. Se avete bisogno di intercettare più controller di invocazioni, l’utilizzo di mvc-interceptor. Se si ha realmente bisogno di utilizzare un aspetto, si può ottenere la risposta se viene passato come argomento al intercettati metodo.

    • Non così in fretta: che Cosa circa un @Aspect che è pensata per avvolgere il @Controller. Il “non è il modo in cui è concepito per essere” argomento, però, non spiega perché HttpServletRequest è autowire capaci e HttpServletResponse non sia.
    • Utilizzare intercettori per che. Si veda la risposta
    • La richiesta – non so perché l’hanno fatta iniettabili. Cercherò un modo per iniettare risposta e vi permetterà di ypu sapere
    • Stai dicendo che spring AOP supporto è insufficiente per il caso specifico utilizzato per il confezionamento di controller che vogliono accedere alla risposta?!
    • Primo, ci sono intercettori. Poi si può ottenere il metodo di argomenti (e quindi la risposta)
    • Il link che hai fornito è stato quello che ho previsto originariamente nella mia domanda. Penso che sia un hack. La primavera potrebbe facilmente rendere la risposta disponibili nello stesso modo di come si fa la richiesta. La mia domanda era, posso gancio in quel meccanismo in qualche modo, piuttosto che re-inventa.
    • Non credo che si può.
    • Cercherò di segnare la risposta corretta, non perché mi piaccia, ma perché riflette accuratamente il modo in cui è.
    • hai detto che “La risposta non dovrebbe andare oltre il web” Ma che cosa succede se ho bisogno di modificare la risposta coockie dalla mia logica ?
    • Un esempio di come voipp: si ha la necessità di aggiornare il OAuth2 token. Se si utilizza RestTemplate si può prendere il non autorizzato di fallimento, richiesta di un nuovo token e aggiornare il cookie che memorizza.

  2. 4

    Può basta inserire la richiesta nel metodo in grado di gestire?

    @RequestMapping(method=Method.GET, value="myUrl")
    public String doGet(HttpServletResponse response){//spring will put the response in for you
      ... 
    }
    • Cerca la risposta, in un non-Controller bean. (Credo).
    • Buon punto, aggiornato per amore di lui winting la risposta. Se Bozho è la risposta migliore.

Lascia un commento