如何在Spring MVC中将“ ab”查询映射到命令对象
问题内容:
我曾经使用“ @RequestParam(” ab“)String foo”从http查询中接收“ ab”参数。
现在我想切换到命令对象,但是我不知道如何接收此参数,我尝试使用以下4种形式“ ab”,“ aB”,“ a_b”,“ a_B”,但均无效,例如,以下代码将作为
网址:http:// localhost:8080 / test1?ab = 1
结果:Foo{ab='null', aB='null', a_b='null', a_B='null'}
提前致谢
@Controller
public class TestController {
@RequestMapping("/test1")
public String test1(
Foo foo,
HttpServletResponse response
) throws IOException {
response.setContentType("text/plain");
response.getOutputStream().write(foo.toString().getBytes("UTF-8"));
return null;
}
public static class Foo {
private String ab;
private String aB;
private String a_b;
private String a_B;
// getter and setter
...
@Override
public String toString() {
return "Foo{" +
"ab='" + ab + '\'' +
", aB='" + aB + '\'' +
", a_b='" + a_b + '\'' +
", a_B='" + a_B + '\'' +
'}';
}
}
}
问题答案:
我很困惑-
您显然在使用request参数a-b
,但是希望它在不带破折号的情况下传递,或者将破折号转换为下划线吗?Java不允许您在类字段中使用名称中的破折号,并且我认为Spring
MVC没有任何神奇的方式可以在请求参数名称中转换破折号,因此我想您可能只是不想使用请求参数如果您要使用这种方法将其传递到控制器中,则在其中加上破折号。
如果必须以这种方式命名请求参数,那么您的另一种选择是提供一个自定义WebBindingInitializer,如Spring手册的Customizing
WebDataBinder
Initialization部分中所述,该a-b
请求将请求参数映射到类的相关字段Foo
。尽管现在我读得更仔细了,但是WebBindingInitializers可能不支持绑定命令对象…