Просто чтобы получить pdf (загрузить в браузер из локальной файловой системы), этого кода достаточно:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/admin/generate_pdf")
public class PdfController {
@GetMapping(value = "/online", /*this is "nice to have" ->*/ produces = MediaType.APPLICATION_PDF_VALUE)
@ResponseBody // this is important, as the return type byte[]
public byte[] generating_pdf() throws IOException {//exception handling...
System.out.println("hello");//logging
// re-generate new file if needed (thread-safety!)...
// ..and dump the content as byte[] response body:
return Files.readAllBytes(Paths.get("d:\\sanjeet7.pdf"));
}
}
... если вам нужно «refre sh», вы можете «переписать» "файл / перезвоните вашему сервису, но все же, возможно, не самое" поточно-безопасное "решение.
Редактировать: Без дальнейшей настройки (порт / контекстный корень / ...) , Вы должны достичь этого по адресу: http://localhost: 8080 / admin / generate_pdf / online
Если вы хотите «работать ближе к байтам» и с void
вернуть type / no @ResponseBody
и хотят дополнительное перенаправление (будет проверено), я думаю, что это все равно должно работать:
@Controller
public class ... {
@GetMapping(value = ..., produces ...)
//no request body, void return type, response will be autowired and can be handled
public void generatePdf(javax.servlet.http.HttpServletResponse response) throws ... {
java.io.OutputStream outStr = response.getOutputStream();
// dump from "somewhere" into outStr, "finally" close.
outStr.close();
//TO BE TESTED:
response.sendRedirect("/");
}
}
.. или даже (вернуть «имя представления» + работать с outputStream):
@GetMapping(value = ..., produces = "application/pdf")
//return a "view name" (!), and you can inject (only) the outputstream (without enclosing response)
public String generatePdf(java.io.OutputStream outputstream) throws... {
// ... do your things on outputstream, IOUtils is good...
// close the stream(?)
// ..and
return "redirect:/"; // to a redirect or a view name.
// .... (in a "spring way", which could also save you some "context path problems"
} ...