Bruno Andrade
Bruno Andrade

Reputation: 261

Hide @ModelAttribute variables from appearing in URL? Spring MVC

I'm using Spring MVC 3 and I have the following Controller

@RequestMapping(value="FileUploadForm",method=RequestMethod.GET)
public String showForm(ModelMap model){
    UploadForm form = new UploadForm();
    model.addAttribute("FORM", form);
    return "FileUploadForm";
}

@RequestMapping(value="FileUploadForm",method=RequestMethod.POST)
public ModelAndView processForm(@ModelAttribute(value="FORM") UploadForm form,BindingResult result){
    if(!result.hasErrors()){
        FileOutputStream outputStream = null;
        String filePath = System.getProperty("java.io.tmpdir") + "/" + form.getFile().getOriginalFilename();
        try {
            outputStream = new FileOutputStream(new File(filePath));
            outputStream.write(form.getFile().getFileItem().get()); 
            outputStream.close();
            System.out.println(form.getName());


             return new ModelAndView(new RedirectView("success?Filepath="+filePath, true, true, false));
        } catch (Exception e) {
            System.out.println("Error while saving file");
            return new ModelAndView("FileUploadForm");
        }

    }else{
        return new ModelAndView("FileUploadForm");
    }

}

This controller get the filepath and use to do a blast

@RequestMapping(value="success")
public String blasta(@ModelAttribute("Filepath") String filepath, Model model){
    Blast sb = new Blast("somepath");
    String[] blastIt = sb.blast("somepath", filepath);
    String newLine = System.getProperty("line.separator");
    ArrayList<Object> result = new ArrayList<>();

    for (int i = 5; i < blastIt.length; i++) {
        if(blastIt[i].startsWith("Lambda")){
            break;
        } else {
            seila.add(blastIt[i]);
            System.out.println(blastIt[i]);
        }
        model.addAttribute("RESULT", result);

    }      
    File f1 = new File(filepath);
    f1.delete();
    return "success";

}

Everything works fine, but I still get the filepath in the url.

http://localhost:8081/Ambase/success?Filepath=filePath

And I want this way if it's possible

http://localhost:8081/Ambase/success

Upvotes: 3

Views: 7705

Answers (2)

prime
prime

Reputation: 15574

try adding this code to servlet-config.xml

<mvc:annotation-driven ignoreDefaultModelOnRedirect="true" />

Upvotes: 3

Japan Trivedi
Japan Trivedi

Reputation: 4483

To avoid this issue you should use RedirectAttributes. It will add the value of filePath to the redirect view params and you can get that in the controller blasta.

To achieve this you need to add one more parameter in the controller function processForm. At the end of all the parameters add RedirectAttributes attributes and then add following line just above the RedirectView statement.

attributes.addFlashAttribute("Filepath",filePath);

And then you can get this attribute in the ModelMap inside blasta controller function.

Hope this helps you. Cheers.

Upvotes: 0

Related Questions