我延伸
public class RenamingProcessor extends ServletModelAttributeMethodProcessor {
@Override
protected void bindRequestParameters(WebDataBinder binder, NativeWebRequest nativeWebRequest) {
...
binder.getObjectName();
...
}
}
binder.getObjectName()
可以返回null吗?
我试图研究来源,但我没有在javadoc中找到这些信息?
答案 0 :(得分:2)
不,它不能返回null(在这个语句中我假设spring框架没有被破坏)。
首先,WebDataBinder将始终具有值。查看他们使用WebDataBinder binder
的{{3}}:
ServletRequestDataBinder servletBinder = (ServletRequestDataBinder) binder;
//No null check between cast and usage
servletBinder.bind(servletRequest);
使用哪个构造函数构建您收到的WebDataBinder并不重要。 ServletModelAttributeMethodProcessor implementation of bindRequestParameters中可用的2个:
1. public WebDataBinder(Object target);
2. public WebDataBinder(Object target, String objectName);
第二个显而易见的是会有一个objectName - 从某种意义上说,我不相信任何在spring上工作的理智程序员都会使用null值来调用它。
第一个调用WebDataBinder,它使用objectName(public DataBinder(Object target,String objectName))调用构造函数,但默认的objectName除外:
this(target, DEFAULT_OBJECT_NAME);
是
public static final String DEFAULT_OBJECT_NAME = "target";
objectName没有setter。一旦初始化,它将保持一个值。
旁注:目标属性(getTarget()
)可以具有空值,如果绑定器仅用于转换普通参数值。不确定这个应用程序。
<小时/> 更新:DataBinder constructor已清除This answer。