实现Java Spring参数校验注解

一、整体流程

pie
title 参数校验注解实现流程
"定义实体类" : 20
"定义校验注解" : 20
"在Controller中使用注解" : 20
"触发校验" : 20
"处理校验结果" : 20
flowchart TD
    A[定义实体类] --> B[定义校验注解]
    B --> C[在Controller中使用注解]
    C --> D[触发校验]
    D --> E[处理校验结果]

二、具体步骤

1. 定义实体类

首先,我们需要先定义一个实体类,例如:

public class User {
    @NotNull(message = "用户名不能为空")
    private String username;
    
    @Min(value = 18, message = "年龄必须大于等于18")
    private int age;
    
    // 其他属性...
    
    // getter和setter方法...
}

在上面的代码中,我们定义了一个User类,其中包含了用户名和年龄两个属性,并对它们进行了参数校验的注解设置。

2. 定义校验注解

接下来,我们需要在User类中定义参数校验的注解,示例代码如下:

@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = { })
@Documented
public @interface Check {
    String message() default "参数校验不通过";
    Class<?>[] groups() default { };
    Class<? extends Payload>[] payload() default {};
}

3. 在Controller中使用注解

然后,我们在Controller中使用定义好的注解进行参数校验,示例代码如下:

@RestController
public class UserController {

    @PostMapping("/user")
    public String addUser(@RequestBody @Valid User user) {
        // 处理用户信息
        return "success";
    }
}

4. 触发校验

当客户端发送请求时,Spring会自动校验参数,并在校验不通过时抛出异常。

5. 处理校验结果

最后,我们需要在Controller中添加异常处理器来处理校验结果,示例代码如下:

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ResponseBody
    public Map<String, Object> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
        Map<String, Object> map = new HashMap<>();
        map.put("code", 400);
        map.put("message", e.getBindingResult().getFieldError().getDefaultMessage());
        return map;
    }
}

在上面的代码中,我们定义了一个全局异常处理器,当参数校验不通过时,会返回对应的错误信息。

总结

通过上面的步骤,我们成功实现了Java Spring参数校验注解的功能。希望这篇文章对初学者能够有所帮助,加油!