Olá, pessoal! Boa noite.
É o seguinte, estou há alguns dias batendo a cabeça para tentar fazer um cadastro com um formulário e em seguida baixar um arquivo automaticamente. Já tentei de diversas maneiras, e essa abaixo é uma delas:
@RequestMapping("/form")
public String form(User user)
{
return “register”;
}
@Transactional
@RequestMapping(method = RequestMethod.POST)
public String register(@Valid User user, BindingResult bindingResult, RedirectAttributes redirectAttributes)
{
if(bindingResult.hasErrors())
{
return form(user);
}
this.userDAO.register(user);
this.userDAO.writerDatasTxt(user);
redirectAttributes.addFlashAttribute("success", "User created!");
return "redirect:register/userTxt/Datas user " + user.name();
}
@RequestMapping("/userTxt/{fileName:.+}")
public void downloadTXTResource(@PathVariable String fileName, HttpServletRequest request, HttpServletResponse response)
{
String dataDirectory = request.getServletContext().getRealPath("/userTxt/");
Path file = Paths.get(dataDirectory, fileName);
System.out.println(file);
if(Files.exists(file))
{
System.out.println("File exists to download!");
response.setContentType("application/txt");
response.addHeader("Content-Disposition", "attachment; filename=" + fileName);
try
{
Files.copy(file, response.getOutputStream());
response.getOutputStream().flush();
}
catch(IOException ex)
{
ex.printStackTrace();
}
}
}
Até funciona, mas antes quando eu não tinha implementado essa parte de download, após o cadastro concluído retornava um “redirect:register/form”, o formulário ficava limpo, e a variável “success” ficava disponível/visível na view sem problema algum, que no caso, é como eu queria que ainda tivesse. Esse “register” é porque a classe é modulada como @RequestMapping("/register").
Alguém pode me dar uma luz? Já tentei de diversas maneiras.