在前后端发送和响应请求时,如何对所传送的参数确保非空或不等于null,这可以从两个地方考虑前端参数传递和后端参数接收。
从前端角度来看:
1. 使用HTML表单验证:使用HTML5内置的输入框类型,可以验证用户的输入是否为空;
2. JavaScript客户端验证:使用JavaScript可以进行更复杂的验证逻辑,并且可以在用户输入时动态反馈;
3. 使用前端框架的验证:许多现代前端框架和库提供了内置的表单验证功能,列如:react使用react-hook-form
或formik
等库进行表单验证和Vue使用v-model
和v-validate
等进行表单验证;
4. 使用TypeScript进行静态类型检查:通过类型检查确保传递的参数符合要求
从后端角度来说:(对于springboot框架)
1. 使用@RequestParam
注解和@NotNull:在控制层的请求参数上做验证
@RequestParam("param1") @NotNull(message = "param1 cannot be null") String param1
2. 使用@Valid
和自定义请求体对象:@Valid
在控制层的请求参数上配置并验证,@NotNull在自定义的请求体对象的字段上做限制
@RequestBody @Valid MyRequest request
@NotNull(message = "executionId cannot be null") private Long executionId;
3. 手动验证参数:对接收到的参数手动验证是否非空
4. 使用Spring Boot的全局异常处理:使用Spring Boot的全局异常处理来捕获验证异常,并返回适当的错误响应。使用@ControllerAdvice
和@ExceptionHandler
来处理验证失败的异常。
@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) { Map<String, String> errors = new HashMap<>(); ex.getBindingResult().getAllErrors().forEach((error) -> { String fieldName = ((FieldError) error).getField(); String errorMessage = error.getDefaultMessage(); errors.put(fieldName, errorMessage); }); return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST); } }