我有http://example.com?value=xyz
这样的请求,我必须为此写GET。
要求是,当我有一个值时,响应必须是特定记录" xyz"来自数据库。但是如果请求是http://example.com
,即没有值,则必须从数据库中检索所有值。
为了达到这个目的,我在请求中有(@RequestParam(value =" name",required = false)String name)。即将值标记为可选
但问题是当我的请求是http://example.com?value=
,即没有值时,我必须抛出请求无效'作为错误而不是从数据库中检索所有值。但在我的情况下,当我将param标记为可选时,它会从DB中检索所有记录。
有没有办法对可选的请求参数进行验证?
答案 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=,您可能会出错。