如何在spring @RestController Servlet中设置获取查询参数名称?

时间:2016-10-26 14:56:15

标签: java spring servlets spring-restcontroller spring-rest

我有一个简单的@RestController,并希望创建一个包含GET查询中任何值的请求对象。

此外,我希望使用与get查询参数名称不同的变量名称。

@RestController
public class MyServlet {
    @RequestMapping(value = "/start")
    public String start(@Valid MyRequest req) {
                Logger.log("IN");
        return req.getTest();
    }
}

public class MyRequest {
    @XmlElement(name = "asd")
    private String test;

    //getter, setter
}

请求:localhost:8080/start?asd=imhere

结果:我正在查看日志语句IN,因此servlet正常工作。 但是req参数为空。为什么呢?

如果我发送以下网址,则有效:localhost:8080/start?test=imhere 所以servlet可以工作,但不能重命名参数。

1 个答案:

答案 0 :(得分:0)

Spring将尝试使用setter构建您的MyRequest对象或反映私有变量,因此只有在您发送test参数时才会填充test变量。

来自documentation (@RequestMapping - Supported method argument types)

  

将请求参数绑定到bean属性的命令或表单对象   (通过设定者)或直接到字段...

编辑 - 如果您想更改名称,您可能需要转换器。参见:

  1. docs
  2. mvc example