我扩展
public class RenamingProcessor extends ServletModelAttributeMethodProcessor {
@Override
protected void bindRequestParameters(WebDataBinder binder, NativeWebRequest nativeWebRequest) {
...
binder.getObjectName();
...
}
}
可以binder.getObjectName()
返回 null?
我尝试研究源代码,但在 javadoc 中没有找到此信息?
最佳答案
不,它不能返回 null(在这个声明中我假设 spring 框架没有损坏)。
首先,WebDataBinder 总是有一个值。看着ServletModelAttributeMethodProcessor implementation of bindRequestParameters他们按原样使用 WebDataBinder binder
:
ServletRequestDataBinder servletBinder = (ServletRequestDataBinder) binder;
//No null check between cast and usage
servletBinder.bind(servletRequest);
使用哪个构造函数来构建您收到的 WebDataBinder 并不重要。 WebDataBinder 上有 2 个可用:
1. public WebDataBinder(Object target);
2. public WebDataBinder(Object target, String objectName);
第二个显然会有一个 objectName - 从某种意义上说,我不相信任何在 spring 上工作的理智程序员会用 null 值调用它。
第一个调用 DataBinder constructor它使用 objectName ( public DataBinder(Object target, String objectName)) 调用构造函数,但默认 objectName 除外:
this(target, DEFAULT_OBJECT_NAME);
这是
public static final String DEFAULT_OBJECT_NAME = "target";
objectName 没有 setter 。一旦初始化,它将保持一个值。
旁注:如果绑定(bind)器仅用于转换普通参数值,则目标属性 (getTarget()
) 可以具有 null 值。不确定这个应用程序。
关于java - WebDataBinder#getObjectName() 可以返回 null 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33101031/