Необязательный параметр POST в spring MVC?
У меня есть следующий код:
@RequestMapping(method = RequestMethod.POST)
public ModelAndView editItem(String name, String description)
Однако некогда описание не передается (это упрощенный пример, чем реальный), и я хотел бы сделать описание необязательным, возможно, заполнив значение по умолчанию, если ни один не передан.
Кто-нибудь знает, как это сделать?
Большое спасибо!
Джейсон
Ответы
Ответ 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));
...
}