RequestContextHolder.currentRequestAttributes () e accesso alla sessione HTTP

1

Devi accedere alla sessione HTTP per il recupero e memorizzare alcune informazioni. Sto usando Spring-MVC per la mia applicazione e ho 2 opzioni qui.

  1. Utente Request/ Session nel mio metodo Controller e faccio il mio lavoro
  2. Utilizza RequestContextHolde per accedere alle informazioni sulla sessione.

Sto separando alcune regole di calcolo da Controller e voglio accedere alle informazioni sulla sessione in questo nuovo livello e per questo ho 2 opzioni

  1. Passa sessione o Richiedi oggetto ad altro metodo in altro livello ed esegui il mio lavoro.
  2. usa RequestContextHolder.currentRequestAttributes() per accedere a request/ session ed eseguire il mio lavoro.

Non sono sicuro di quale sia la giusta strada da percorrere? con il secondo approccio, posso vedere che il metodo di chiamata sarà più pulito e non ho bisogno di passare request/ session ogni volta.

    
posta Umesh Awasthi 27.10.2013 - 17:21
fonte

1 risposta

2

Vorrei affrontare questo problema in modo un po 'diverso. Supponiamo che sia necessario solo un attributo "attr1" dalla sessione. Quindi, ciò che dovresti fare in realtà è ottenere questo attributo in @Controller, passarlo alla tua classe logica di calcolo (@Service), restituire il risultato del calcolo a @Controller e memorizzarlo nella sessione. Grazie a ciò la logica di calcolo non sarà indipendente da un livello web (HttpSession), quindi riutilizzabile.

per esempio:.

@Controller
public class AController {

    @Autowired
    private SomeCalculationService someCalculationService;

    @RequestMapping(value = "/", method = RequestMethod.GET)
    @ResponseBody
    public Account accounts(HttpSession httpSession) {      
        MyData myData = httpSession.getAttribute("attr1");
        SomeResult someResult = someCalculationService.calculate(myData);
        httpSession.setAttribute("attr2", someResult);
    }
}
    
risposta data 27.10.2013 - 23:17
fonte

Leggi altre domande sui tag