在春假中验证可选的@Requestparam

时间:2018-03-06 04:13:02

标签: spring rest model-view-controller get

我有http://example.com?value=xyz这样的请求,我必须为此写GET。 要求是,当我有一个值时,响应必须是特定记录" xyz"来自数据库。但是如果请求是http://example.com,即没有值,则必须从数据库中检索所有值。

为了达到这个目的,我在请求中有(@RequestParam(value =" name",required = false)String name)。即将值标记为可选

但问题是当我的请求是http://example.com?value=,即没有值时,我必须抛出请求无效'作为错误而不是从数据库中检索所有值。但在我的情况下,当我将param标记为可选时,它会从DB中检索所有记录。

有没有办法对可选的请求参数进行验证?

2 个答案:

答案 0 :(得分:0)

如果您想坚持query string样式,可以添加两个单独的处理程序 一个http://example.com 其他required=true代表http://example.com?value=xyz。 而且您仍然可以使用单独的公共私有方法重用大部分代码。

然而,

如果您可以更改您的网址格式以使用path variables,则它会变得更具可读性和清晰度。

@GetMapping(path={"/", "/value/{value}")
public void method(@PathVariable(name = "value", required = false) String value){
  // Your code
}

然后您可以像

一样查询此端点
  • http://example.com
  • http://example.com/value/xyz

答案 1 :(得分:0)

您可以在控制器中检查查询字符串,该字符串应该起作用:

if (request.getQueryString() != null) {
   if (value.isPresent() || request.getQueryString().contains("value")){
    if (!value.isPresent()){
        // Throw your error
    }
  }
}

上面的代码将首先检查是否存在value或url / query字符串中是否包含单词“ value”(如果其中一个为真),它将命中下一个if语句。然后,您可以检查值是否不存在。如果不是,则表示有人向您发送了http://example.com?value=,您可能会出错。