【问题标题】:how to map "a-b" query to a command object in Spring MVC如何将“a-b”查询映射到 Spring MVC 中的命令对象
【发布时间】:2009-12-22 02:38:17
【问题描述】:

我曾经使用"@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 + '\'' +
                '}';
    }
}





}

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    我很困惑——您显然在使用请求参数a-b,但希望它在没有破折号的情况下传入,或者将破折号转换为下划线? Java 不允许您在名称中使用破折号的类字段,而且我认为 Spring MVC 没有任何神奇的方式来转换请求参数名称中的破折号,所以我想说您可能只想不使用请求参数如果您打算使用这种方法将它们传递到控制器中,则在其中添加破折号。

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

    【讨论】:

    • a-b 来自一个旧的 API,我应该继续支持这个 API,这就是为什么我不会从 a-b 切换到 aB。谢谢。
    • 你有没有想过,这里有同样的问题stackoverflow.com/questions/20670456/…
    猜你喜欢
    • 2015-12-08
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    相关资源
    最近更新 更多