跟了半天的源码,才找到在org.springframework.web.bind.WebDataBinder里有一段这样的代码
if (pv.getName().startsWith(fieldMarkerPrefix)) { String field = pv.getName().substring(fieldMarkerPrefix.length()); if (this.getPropertyAccessor().isWritableProperty(field) && !mpvs.contains(field)) { Class<?> fieldType = this.getPropertyAccessor().getPropertyType(field); mpvs.add(field, this.getEmptyValue(field, fieldType)); } mpvs.removePropertyValue(pv); }
而fieldMarkerPrefix 跟出来的结果就是“_”,
解决方案有两种
1:直接在request获取这类参数
2:可以将此参数的前面的横线去掉,这样就能接收到以下划线开头的请求参数了,但是需要注意参数覆盖的问题,比如请求方有两个参数传递
a _a ,那么这个时候 我们只能收到一个参数了。
spring为啥会这么做,暂时还不知道,如果有知道的,麻烦告诉我一下