如何将“a-b”查询映射到Spring MVC中的命令对象

时间:2009-12-22 02:38:18

标签: spring spring-mvc

我曾经使用“@RequestParam(”a-b“)String foo”从http查询中接收“a-b”参数。

现在我想切换到命令对象,但我不知道如何接收这个参数,我尝试了4个表格“ab”,“aB”,“a_b”,“a_B”,但是都不起作用,例如,以下代码将显示为

网址: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 + '\'' +
                '}';
    }
}





}

1 个答案:

答案 0 :(得分:1)

我很困惑 - 您显然正在使用请求参数a-b,但希望在没有破折号的情况下传入它,或者将破折号转换为下划线? Java不会让你的名字中包含破折号的类字段,我不认为Spring MVC有任何神奇的方法来转换请求参数名称中的破折号,所以我想你可能只是想不使用请求参数如果您要使用这种方法将它们传递给控制器​​,则使用破折号。

如果您必须以这种方式命名您的请求参数,那么您的另一个选择是提供自定义WebBindingInitializer,如Spring手册的Customizing WebDataBinder Initialization部分所述,该部分映射{{ 1}}请求参数到a-b类的相关字段。虽然现在我更仔细地阅读,但WebBindingInitializers可能不支持绑定命令对象......