Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring启动验证请求参数_Java_Spring_Validation_Spring Boot - Fatal编程技术网

Java Spring启动验证请求参数

Java Spring启动验证请求参数,java,spring,validation,spring-boot,Java,Spring,Validation,Spring Boot,我试图学习SpringBoot,并开发一个简单的RESTAPI,我开发了一个简单的计算器 我有一个用@service注释的服务类,它有一个简单的方法 public double calculate(String operation, double num1, double num2) { ... } 我从控制器调用这个方法,就像 @GetMapping("/calculate") public double calculate(@RequestParam(value = "op

我试图学习SpringBoot,并开发一个简单的RESTAPI,我开发了一个简单的计算器

我有一个用@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请求参数的最佳实践是什么?

这取决于您要执行的验证

一种方法是对参数本身使用验证注释

例如,@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不为null-您可能希望使用@NotEmpty或@NotBlank注释来确保op的实际值分别为长度>0或修剪长度>0


正如Cristian Colorado在下面的评论中指出的,如果num1或num2不是有效的双精度值,Spring将自动失败验证或端点匹配。

正如您所说的,您只想验证Number@NumberFormat注释。@NumberFormat注释适用于java.lang.Number Integer、Float、Double、BigDecimal等的子类

@NumberFormat(style=Style.NUMBER)

使用BigDecimal是有意义的,但我不需要检查参数的值范围。我只需要检查它们是否是数字。如果num1不是数字,spring将无法绑定参数,或者会抛出ServletRequestBindingException,或者只是找不到合适的端点来处理请求。