spring MVC中的可选POST参数?

Fur*_*lon 31 spring-mvc

我有以下代码:

@RequestMapping(method = RequestMethod.POST)
public ModelAndView editItem(String name, String description)
Run Code Online (Sandbox Code Playgroud)

但是,某些时候描述没有被传入(这是一个简单的例子而不是真实的),我想使描述可选,如果没有传入,可能填写默认值.

任何人都知道如何做到这一点?

非常感谢!

贾森

Sla*_*hin 126

如果您使用的是Spring MVC 3.0或更高版本,那么只需设置defaultValue参数@RequestParam:

public ModelAndView editItem(@RequestParam(value = "description", defaultValue = "new value") String description)
Run Code Online (Sandbox Code Playgroud)

在Spring MVC 2.5中,我建议将value标记为as required = false并手动检查其值为null:

public ModelAndView editItem(@RequestParam(value = "description", required = false) String description) {
    if (description == null) {
        description = "new value";
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

另请参阅有关@RequestParam注释的相应文档.


更新为JDK 8春天4.1+:现在你可以使用java.util.Optional这样的:

public ModelAndView editItem(@RequestParam("description") Optional<String> description) {

    item.setDescription(description.getOrElse("default value"));

    // or only if it's present:
    description.ifPresent(value -> item.setDescription(description));
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 另请注意,如果您的请求参数是基元(如int)并且您将其标记为required = false,则您将需要使用包装类(如Integer),以便它可以作为空值传递给控制器​​方法如果请求参数不存在. (4认同)
  • 我认为这种方法比包含WebRequestParameter要简洁得多. (3认同)

DwB*_*DwB 18

而不是使用@RequestParam可选参数,取一个类型的参数org.springframework.web.context.request.WebRequest.例如,

@RequestMapping(method = RequestMethod.POST)
public ModelAndView editItem(
  @RequestParam("name")String name,
  org.springframework.web.context.request.WebRequest webRequest)
{
  String description = webRequest.getParameter("description");

  if (description  != null)
  {
     // optional parameter is present
  }
  else
  {
    // optional parameter is not there.
  }
}
Run Code Online (Sandbox Code Playgroud)

注意:有关在不使用WebRequest参数的情况下解决此问题的方法,请参阅下面的内容(defaultValue和required).