我曾经使用“@RequestParam("a-b") String foo”从http查询接收“a-b”参数。
现在我想切换到命令对象,但我不知道如何接收这个参数,我尝试了以下4种形式“ab”,“aB”,“a_b”,“a_B”,但都不起作用,例如,以下代码将结果为
URL: http://localhost:8080/test1?a-b=1 http://localhost:8080/test1?a-b=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 + '\'' +
'}';
}
}
}
我很困惑——你显然在使用请求参数a-b
,但期望它在没有破折号的情况下传递,或者将破折号转换为下划线? Java 不允许你的类字段名称中带有破折号,而且我不认为 Spring MVC 有任何神奇的方法来转换请求参数名称中的破折号,所以我想说你可能只是不想使用请求参数如果您打算使用这种方法将它们传递到控制器中,请在其中添加破折号。
如果您必须以这种方式命名请求参数,那么您的另一个选择是提供自定义Web绑定初始化器 http://static.springsource.org/spring/docs/3.0.x/javadoc-api/index.html?org/springframework/web/bind/support/WebBindingInitializer.html,如中所述自定义WebDataBinder初始化 http://static.springsource.org/spring/docs/2.5.6/reference/mvc.html#mvc-ann-webdatabinderSpring 手册的部分,映射了a-b
向您的相关字段请求参数Foo
班级。尽管现在我更仔细地阅读了这一点,但 WebBindingInitializers 可能不支持绑定命令对象......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)