有不同的方法可以做到这一点。
如果您可以更改MyDTO
课程,最简单的方法是按照 M.Deinum 的建议添加一个设置器:
public class MyDTO {
private String kiosk;
...
public void setNew_kiosk(String kiosk) {
this.kiosk = kiosk;
}
}
这样,您可以处理http://localhost:1234/mvc/controllerUrl?kiosk=false
以及http://localhost:1234/mvc/controllerUrl?new_kiosk=false
如果您不允许这样做(因为 DTO 是您不允许更改的库的一部分或...),您可以使用映射到 的过滤器,这将使用将覆盖以下方法/mvc/controllerUrl
的自定义包装请求HttpServlerRequestWrapper
:
String getParameter(String name)
Map<String,String[]> getParameterMap()
Enumeration<String> getParameterNames()
String[] getParameterValues(String name)
调用底层请求方法并处理特殊参数名称。例子 :
String[] getParameterValues(String name) {
String[] values = req.getParameterValues(name); // req is the wrapped request
if ("kiosk".equals(name) && (values == null) { // will accept both names
values = req.getParameterValues("new_kiosk"); // try alternate name
}
return values;
}
这将更难编写和测试,所以只有在你不能修改MyDTO
类时才这样做。
您也可以尝试使用WebBindingInitializer
. 来自Spring Framework 参考手册:
要外部化数据绑定初始化,您可以提供WebBindingInitializer
接口的自定义实现,然后通过为 提供自定义 bean 配置来启用它AnnotationMethodHandlerAdapter
,从而覆盖默认配置。
注意:推荐的用法是为整个应用程序注册自定义编辑器 - 而不是您的用例。Spring Framework 通常被描述为易于扩展但不易覆盖。买者自负 ...
总结:尝试使用方法1,如果不能,则使用方法2,如果您有其他原因使用自定义,请仅尝试方法3WebBindingInitializer