Java Spring启动验证请求参数
我试图学习SpringBoot,并开发一个简单的RESTAPI,我开发了一个简单的计算器 我有一个用@service注释的服务类,它有一个简单的方法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
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,或者只是找不到合适的端点来处理请求。