如果是非空的,入参只支持1、2,传其他的报参数异常;java代码给我一个最简单的写法,直接给我结果
时间: 2025-06-25 12:26:31 浏览: 8
<think>嗯,用户想要一个简单的Java代码示例,用来验证入参是否为1或2,否则抛出异常。我需要先理解他的需求。参数校验在Java中通常可以用自定义注解或者使用现有的框架比如Hibernate Validator来实现。但用户可能希望一个简单直接的例子,不需要引入太多依赖。
首先,用户提到“简单实现”,可能更倾向于用纯Java代码,而不是复杂的框架。所以可以考虑手动校验,在方法内部检查参数值,如果不符合条件就抛出异常。这种方法虽然基础,但足够直接,适合简单的校验需求。
比如,可以写一个方法,接受一个整数参数,然后使用if语句判断是否为1或2。如果不是,就抛出IllegalArgumentException。这样的示例代码简单易懂,用户应该可以快速上手。
不过,用户提供的引用内容里提到了使用自定义注解和Hibernate Validator,比如@Valid和ConstraintValidator。这说明用户可能对更优雅的校验方式感兴趣,或者项目里已经用了这些框架。这时候,提供一个基于自定义注解的示例可能更符合他们的深层需求,尤其是如果他们希望代码更整洁、可复用。
需要权衡一下,用户的问题明确要求“简单”,所以可能两种方法都要展示。先给出基础的手动校验,再展示使用框架的更优雅方式。这样用户可以根据项目需要选择合适的方法。
在引用中,[^2]提到了如何实现ConstraintValidator,而[^3]提到了在控制器中使用@Valid进行校验。所以,可以结合这些信息,展示如何创建自定义注解@OneOrTwo,并实现校验逻辑。这样用户可以直接复制代码,应用到他们的Spring Boot项目或其他支持Hibernate Validator的环境中。
另外,要注意代码的正确性。比如,自定义注解需要正确设置@Constraint和元注解,校验器类要实现ConstraintValidator,并在isValid方法中判断值是否为1或2。同时,在需要校验的地方使用@Valid触发校验。
可能用户没有说明他们使用的框架,但根据引用内容,他们可能已经了解Hibernate Validator,所以第二种方法更适合他们的场景。但为了全面性,还是应该提供两种方法,并说明各自的适用情况。
最后,确保代码示例正确,没有语法错误,并且注释清晰。这样用户可以直接使用,避免因为代码错误而浪费时间。</think>### 基础实现方案(纯Java)
```java
public class ParamValidator {
public static void validate(int value) {
if (value != 1 && value != 2) {
throw new IllegalArgumentException("参数必须为1或2");
}
}
}
// 使用示例
ParamValidator.validate(inputValue);
```
### 优雅实现方案(基于Hibernate Validator)
#### 1. 创建自定义注解
```java
@Documented
@Constraint(validatedBy = OneOrTwoValidator.class)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface OneOrTwo {
String message() default "参数必须为1或2";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
```
#### 2. 实现校验逻辑[^2]
```java
public class OneOrTwoValidator implements ConstraintValidator<OneOrTwo, Integer> {
@Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {
return value != null && (value == 1 || value == 2);
}
}
```
#### 3. 应用校验注解
```java
public class RequestDTO {
@OneOrTwo
private Integer code;
// getter/setter
}
@PostMapping("/test")
public ResponseEntity<?> testEndpoint(@Valid @RequestBody RequestDTO request) {
// 业务逻辑
}
```
### 方案对比
1. **基础方案**:直接使用条件判断,适合简单场景
2. **注解方案**:通过声明式校验提升代码可读性,支持Spring生态的自动校验机制
阅读全文
相关推荐















