Mam przypadek użycia, w którym muszę zwrócić plik PDF do użytkownika, który został wygenerowany dla nas. Wydaje się, że muszę w tym przypadku wykorzystać ResponseEntity, ale mam kilka rzeczy, które nie są zbyt jasne.Spring ResponseEntity
- Jak mogę przekierować użytkownika - udawajmy, że nie mają uprawnień dostępu do tej strony? Jak mogę przekierować je do osobnego kontrolera?
- Czy mogę ustawić kodowanie odpowiedzi?
- Czy mogę osiągnąć jeden z tych dwóch bez wprowadzenia HttpResponse jako parametru do Moje RequestMapping?
Używam Spring 3.0.5. Przykładowy kod poniżej:
@Controller
@RequestMapping("/generate/data/pdf.xhtml")
public class PdfController {
@RequestMapping
public ResponseEntity<byte []> generatePdf(@RequestAttribute("key") Key itemKey) {
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentType(MediaType.valueOf("application/pdf"));
if (itemKey == null || !allowedToViewPdf(itemKey)) {
//How can I redirect here?
}
//How can I set the response content type to UTF_8 -- I need this
//for a separate controller
return new ResponseEntity<byte []>(PdfGenerator.generateFromKey(itemKey),
responseHeaders,
HttpStatus.CREATED);
}
Naprawdę chciałbym, aby nie ciągnąć w odpowiedzi ... Żaden z moich kontrolerów zrobiłeś do tej pory, a ja nienawidzę mieć do dostosowania go w ogóle.
Największym problemem jest to, że korzystają z kilku niestandardowych przechwytujących, aby automatycznie dodać rzeczy z powrotem na żądanie. Potrzebujemy tych przechwytujących, aby uruchomić, gdy użytkownik nie jest w stanie wyświetlić strony, aby wyświetlać komunikaty o błędach - zwrócenie prostego przekierowania String nie powoduje tego. – Scott
Jeśli używasz Interceptorów, jeśli implementujesz 'HandlerInterceptor', masz bezpośredni dostęp do zdarzeń' beforeHandle', 'afterCompletion' i' postHandle' kontrolera cyklu życia, * i * masz bezpośredni dostęp do 'HttpServletRequest Obiekty 'i' HttpServletResponse'. Czy już wdrażasz ten interfejs? – atrain
Te programy obsługi nie są uruchamiane, gdy napotkasz w swoim kodzie wyjątek niezatapiany. – Scott