如何防止Spring 3.0 MVC @ModelAttribute变量出现在URL中?


问题内容

使用Spring MVC 3.0.0.RELEASE,我有以下控制器:

@Controller
@RequestMapping("/addIntake.htm")
public class AddIntakeController{

  private final Collection<String> users;

  public AddIntakeController(){
    users = new ArrayList<String>();
    users.add("user1");
    users.add("user2");
    // ...
    users.add("userN");
  }

  @ModelAttribute("users")
  public Collection<String> getUsers(){
    return this.users;
  }

  @RequestMapping(method=RequestMethod.GET)
  public String setupForm(ModelMap model){

    // Set up command object
    Intake intake = new Intake();
    intake.setIntakeDate(new Date());
    model.addAttribute("intake", intake);

    return "addIntake";
  }

  @RequestMapping(method=RequestMethod.POST)
  public String addIntake(@ModelAttribute("intake")Intake intake, BindingResult result){

    // Validate Intake command object and persist to database
    // ...

    String caseNumber = assignIntakeACaseNumber();

    return "redirect:intakeDetails.htm?caseNumber=" + caseNumber;

  }

}

Controller从从HTML表单填充的命令对象中读取Intake信息,验证命令对象,将该信息持久化到数据库中,并返回案例编号。

一切都很好,除了当我重定向到takenDetails.htm页面时,我得到的URL看起来像这样:

http://localhost:8080/project/intakeDetails.htm?caseNumber=1&users=user1&users=user2&users=user3&users=user4...

如何防止用户“收藏夹”显示在URL中?


问题答案:

从spring
3.1开始,RequestMappingHandlerAdapter提供了一个称为的标志ignoreDefaultModelOnRedirect,如果控制器重定向,则可以用来阻止使用defautl模型的内容。