Подтвердить что ты не робот

Необязательный параметр POST в spring MVC?

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

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

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

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

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

Джейсон

4b9b3361

Ответ 1

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

Ответ 2

Если вы используете 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.


UPDATE для JDK 8 и Spring 4.1+: теперь вы можете использовать java.util.Optional следующим образом:

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

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

    // or only if it present:
    description.ifPresent(value -> item.setDescription(description));
    ...
}