我使用Spring MVC 3,我有以下控制器隱藏@ModelAttribute變量出現在URL中? Spring MVC的
@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");
}
}
該控制器獲取的文件路徑和使用做了爆炸
@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";
}
一切工作正常,但我仍然得到url中的文件路徑。
http://localhost:8081/Ambase/success?Filepath=filePath
而且我想這樣,如果有可能
http://localhost:8081/Ambase/success
你爲什麼要標註使用'@ModelAttribute( 「文件路徑」)'文件路徑?你是否應該使用@PathVarible(「Filepath」)來獲取POST/GET參數? – gigadot
此外,使用POST請求重定向視圖是不可能的,因此無法隱藏查詢路徑。重定向在客戶端完成,而不是在服務器上完成。 – gigadot
嗯,我刪除了POST請求,但另一個我沒有得到,我使用modelattribute傳遞文件創建到另一個控制器的路徑,所以我可以使用文件 –