Что нужно сделать, чтобы вернуть объект пользователя, где объект Department = null?
Если вы ищете решение для конкретного контроллера, найдите все пустые вложенные параметры и установите ихпараметры как запрещенные поля.
@InitBinder(value="user")
public void bind(WebDataBinder dataBinder, WebRequest webRequest) {
List<String> emptyParams = new ArrayList<String>();
Iterator<String> itr = webRequest.getParameterNames();
while(itr.hasNext()) {
String name = itr.next();
if(name.startsWith("department.")) {
Object value = webRequest.getParameter(name);
if("".equals(value)) {
emptyParams.add(name);
}
}
}
if(!emptyParams.isEmpty()) {
dataBinder.setDisallowedFields(emptyParams.toArray(new String[emptyParams.size()]));
}
}
Если вы ищете универсальное решение, создайте пользовательское связыватель данных и удалите все вложенные пустые параметры.
public class CustomDataBinder extends ServletRequestDataBinder {
@Override
protected void doBind(MutablePropertyValues mpvs) {
PropertyValue[] pvArray = mpvs.getPropertyValues();
for (PropertyValue pv : pvArray) {
boolean nestedProperty = PropertyAccessorUtils.isNestedOrIndexedProperty(pv.getName());
if(nestedProperty && "".equals(pv.getValue())) {
mpvs.removePropertyValue(pv);
}
}
super.doBind(mpvs);
}
}
И для использования CustomDataBinder выдолжен иметь пользовательский HandlerAdapter.
public class StandardAnnotationMethodHandlerAdapter extends AnnotationMethodHandlerAdapter {
@Override
protected ServletRequestDataBinder createBinder(HttpServletRequest request, Object target, String objectName) throws Exception {
CustomDataBinder dataBinder = new CustomDataBinder (target, objectName);
return dataBinder;
}
}