在 Java 中,您可以使用注解来校验方法参数是否为空。以下是几种常见的实现方式,每种方式都包含了详细的步骤流程、依赖和示例代码。
注意:以下示例中使用的依赖版本可能会有更新,请根据实际情况进行调整。
Java Bean Validation 是 Java 规范,而 Hibernate Validator 则是 Bean Validation 的一个实现。
步骤流程:
添加 Maven 依赖(或在 Gradle 中添加相应依赖):
Maven 依赖:
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.2.0.Final</version>
</dependency>
Gradle 依赖:
implementation 'org.hibernate.validator:hibernate-validator:6.2.0.Final'
创建一个参数校验的 POJO 类,其中使用注解来定义校验规则。
import javax.validation.constraints.NotBlank;
public class MyRequest {
@NotBlank(message = "Name cannot be blank")
private String name;
// Getter and Setter
}
在方法参数中使用校验注解。
import javax.validation.Valid;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
@PostMapping("/validate")
public String validateInput(@Valid @RequestBody MyRequest request) {
// 执行方法逻辑
return "Success";
}
}
Spring 框架提供了一些方便的注解来进行参数校验。
步骤流程:
添加 Spring Boot Starter 依赖(已包含 Hibernate Validator)。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
在方法参数上使用 @NotNull 注解进行非空校验。
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Validated
public class MyController {
@PostMapping("/validate")
public String validateInput(@NotNull(message = "Name cannot be null") String name) {
// 执行方法逻辑
return "Success";
}
}
这种方式使用了 AspectJ 切面编程来实现自定义的参数校验。
步骤流程:
添加 AspectJ 依赖。
Maven 依赖:
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.9.7</version>
</dependency>
Gradle 依赖:
implementation 'org.aspectj:aspectjrt:1.9.7'
创建一个自定义注解和切面类。
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface NotEmpty {
String message() default "Parameter cannot be empty";
}
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class NotEmptyAspect {
@Before("@annotation(notEmpty) && args(.., @NotEmpty (*), ..)")
public void beforeMethod(NotEmpty notEmpty) {
// 执行校验逻辑
// 若参数为空,抛出异常
}
}
在方法参数上使用自定义注解。
@RestController
public class MyController {
@PostMapping("/validate")
public String validateInput(@NotEmpty String name) {
// 执行方法逻辑
return "Success";
}
}
这些是几种校验方法参数是否为空的实现方式。您可以根据项目需求选择合适的方式进行参数校验。每种方式都有其适用场景和优缺点,根据实际情况做出选择。