необязательный параметр POST весной MVC? - PullRequest
31 голосов
/ 06 апреля 2011

У меня есть следующий код:

@RequestMapping(method = RequestMethod.POST)
public ModelAndView editItem(String name, String description)

Однако иногда описание не передается (это упрощенный пример, а не реальный), и я хотел бы сделать описание необязательным, возможно, заполнивв значении по умолчанию, если ничего не передано.

Кто-нибудь знает, как это сделать?

спасибо большое!

Джейсон

Ответы [ 2 ]

126 голосов
/ 12 апреля 2011

Если вы используете Spring MVC 3.0 или выше, тогда просто установите defaultValue параметр @RequestParam:

public ModelAndView editItem(@RequestParam(value = "description", defaultValue = "new value") String description)

В Spring MVC 2.5 я предлагаю пометить значение как required = false и проверить ихзначение против нуля вручную:

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

См. также соответствующую документацию о аннотации @RequestParam .


ОБНОВЛЕНИЕ для JDK 8 и Spring4.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));
    ...
}
18 голосов
/ 06 апреля 2011

Вместо использования @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.
  }
}

Примечание. См. Ниже (defaultValue и обязательно), чтобы найти способ решить эту проблему без использования параметра WebRequest.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...