Spring Boot验证请求参数

时间:2019-03-05 22:12:25

标签: java spring validation spring-boot

我试图学习Spring Boot并使用一个简单的REST API(我开发了一个简单的计算器)。

我有一个带有@Service注释的服务类,它具有一个简单的方法

public double calculate(String operation, double num1, double num2) {
        ...
}

我正在像这样从控制器调用此方法

@GetMapping("/calculate")
public double calculate(@RequestParam(value = "op") String op,
                        @RequestParam(value = "num1") double num1,
                        @RequestParam(value = "num2") double num2) {

    return calculatorService.calculate(op, num1, num2);
}

我想验证这些参数(num1和num2是否为数字,并且所有参数都不应该为null)。验证Spring Boot的请求参数的最佳实践是什么?

2 个答案:

答案 0 :(得分:1)

这取决于您要执行的验证。

一种方法是在参数本身上使用验证注释。

例如@NotNull@Min@Max等。这些特定的可以在javax.validation:validation-api中找到,但是还有很多其他的(您可以构建自己的自己的。)

@GetMapping("/calculate")
public double calculate(@RequestParam(value = "op") @NotNull String op,
                        @RequestParam(value = "num1") double num1,
                        @RequestParam(value = "num2") double num2) {

@NotNull验证将确保op不为空-您可能要使用@NotEmpty@NotBlank批注以确保{{1 }}的长度分别大于0或修剪的长度大于0。

正如Cristian Colorado在下面的评论中指出的那样,如果opnum1都不是有效的double值,Spring将自动通过验证(或端点匹配)。

答案 1 :(得分:0)

正如您所告知的那样,您只想验证Number @NumberFormat 。 @NumberFormat批注适用于java.lang.Number的子类(整数,浮点数,双精度,BigDecimal等)

@NumberFormat(style=Style.NUMBER)