【发布时间】:2020-01-03 20:36:14
【问题描述】:
我一直在尝试使用 spring @NotEmpty 来强制 REST api 中的一些输入参数。
到目前为止,这就是我所取得的成就。
休息控制器
@RestController
public class ResourceController {
@Autowired
private GestionaDatosCrmService service;
@PostMapping(path = Constantes.OBTENER_DATOS_CRM)
@ResponseStatus(HttpStatus.CREATED)
public ObtenerDatosCrmResponse obtenerDatosCrm(@RequestHeader HttpHeaders headerRequest,
@Valid @RequestBody ObtenerDatosCrmRequest request, HttpServletResponse headerResponse) {
return service.obtenerDatosCrm(headerRequest, request, headerResponse);
}
}
请求对象
import javax.validation.constraints.NotEmpty;
//import org.hibernate.validator.constraints.NotEmpty;
public class ObtenerDatosCrmRequest {
@NotEmpty(message = "Please provide a number")
private String numSN;
private String callID;
public String getNumSN() {
return numSN;
}
public void setNumSN(String numSN) {
this.numSN = numSN;
}
public String getCallID() {
return callID;
}
public void setCallID(String callID) {
this.callID = callID;
}
}
请注意这个重要的细节,我在 @NotEmpty 注释中使用了 javax.validation.constraints.NotEmpty,但是当我更改为已弃用的 org.hibernate.validator.constraints.NotEmpty 时,这不起作用,@NotEmpty 启动并且我收到 400 Bad request 错误测试时。
我使用的是 spring boot 2.2.2.RELEASE,是否有一些已知的错误或问题?
【问题讨论】:
-
可能只是您使用的是hibernate的验证规范实现。它需要它自己的注释才能工作。这很可能是罪魁祸首。很可能不是错误,只是它是如何工作的。从 spring 开始:“上面的基本配置将触发 Bean Validation 使用其默认引导机制进行初始化。JSR-303/JSR-349 提供程序,例如 Hibernate Validator,预计将出现在类路径中,并将被自动检测到。”见:docs.spring.io/spring/docs/4.1.x/spring-framework-reference/…
-
在我的 pom 中,我添加了 validation-api 和 hibernate-validator 的依赖项,但这些似乎都不起作用
-
使用正文添加请求和响应。如果 @NotEmpty 验证有效且 numSN 字段为空,您将收到 HTTP 400 Bad Request
-
改用@NotBlank ..
-
@ShekharRai 试过
@NotBlank同样的事情不起作用。
标签: java spring rest spring-boot hibernate-validator