Napisałem kod generujący plik Excel za pomocą REST JAX-RS i potwierdziłem, że wygenerowany plik Excel znajduje się w katalogu serwera GlassFish.Jak ustawić nagłówek odpowiedzi w JAX-RS, aby użytkownik zobaczył okno pobierania dla programu Excel?
Ale moim celem jest, gdy użytkownik kliknie przycisk (generujący plik Excel .xls), chcę, aby pojawiło się okno pobierania z pytaniem użytkownika, czy zapisać lub otworzyć plik .xls, tak jak inne usługi internetowe, które pobierają typ plików.
Według moich poszukiwań, krok jest:
generować Excel (.xls zrobione)
napisać Excel do strumienia
w pliku JAX-RS, ustaw odpowiedź nagłówek do czegoś podobnego,
String fileName = "Blah_Report.xls"; response.setHeader ("Content-Disposition", "attachment; filename =" + fileName);
Moje pytanie brzmi: robię to wszystko w pliku JAX-RS i nie mam dostępnego obiektu HttpServletResponse.
Według odpowiedź od Add Response Header to JAX-RS Webservice
Mówi:
Można wprowadzić odniesienie do rzeczywisty HttpServletResponse poprzez @Context adnotacji w swojej usługa i używać AddHeader() etc , aby dodać nagłówek .
naprawdę nie mogę zrozumieć, co dokładnie to oznacza bez przykładowy kod ..
@GarretWilson Dlaczego nie? Co cię myli? To prosty nagłówek. – Tarlog
Ponieważ singleton 'MyResource' miałby funkcję' myMethod() 'wywoływaną przez wiele wątków jednocześnie. Każdy wątek miałby inną instancję 'HttpServletResponse', ale zmienna składowa singleton' anotherServletResponse' może zawierać tylko jedną wartość naraz. Jedyny sposób by to działało, to gdyby 'innyServletResponse' został wstrzyknięty z pewnym proxy bezpiecznym dla wątków, który używa wątku lokalnego lub jakiegoś takiego w celu określenia aktualnej instancji' HttpServletResponse' bieżącego wątku. –
O ile pamiętam, wstrzykiwany jest HttpServletRequestWrapper; jego implementacja pobiera prawdziwy HttpServletRequest z TLS. Więc twoje przypuszczenie jest mniej więcej poprawne. – Tarlog