在 AOP 之前做 java 验证注解 运行

Do java validation annotations run before AOP

我是 Spring Boot AOP 的新手。

在java验证注释(例如@NotNull)之前使用@Before 运行注释的AOP方法是否?

我有一些其他自定义验证需要 运行 每个请求,但我需要 运行 在 java 验证注释后 运行 这些验证 运行.

第一个 运行 是哪个?

我的控制器:

@RestController
@RequestMapping("/users")
public class UserController {

    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @PostMapping(value = "")
    public List<User> getAllUsers(@Valid @RequestBody User user) {
        return userService.getAllUsers();
    }
}

我的建议:

@Aspect
@Component
public class AspectConfig {

    @Pointcut(value = "within(@org.springframework.web.bind.annotation.RestController *)")
    public void restControllers() {

    }

    @Before(value = "restControllers()")
    public void logRequest(JoinPoint joinPoint) { 
         ...
    }

}

Does an AOP method annotated with @Before run before java validation annotations

不,它会在之后运行,就像您希望的那样。另见 this question。所以你应该准备好了。只有在验证成功时才应触发您的日志记录建议,因为只有这样才会调用目标方法。

如果您希望在验证器启动之前 log/do 在请求级别上执行某些操作,您可以实施 HandlerInterceptor,请参阅