Wie kann ich meine Spring-Aspekte ausführen, bevor @ Valid / @ Validated Annotation auf einer Spring-Controller-Methode ausgeführt wird?

Ich habe diese Service / Controller-Methode:

public ResponseEntity<PolicyDTO> addPolicy(@Valid @RequestBody PolicyDTO policy)
        throws InternalServerException, BadRequestException {
    log.debug("Adding a new policy");
}

Beachten Sie die @Valid Annotation in der Methode params

Für diesen Controller haben wir die folgende Aspektklasse definiert:

@Aspect
@Component
public class BackwardsCompatibilityHandler {
@Around("execution(* com.company.PolicyController.addPolicy(..))")
public Object ControllerMethod(JoinPoint jp) 
{
    // DO Code before and after the method call
}

Der Hauptgrund für diesen Aspekt / Proxy ist das Abfangen von Methodenaufrufen und das Ausführen einer Vor- / Nachbearbeitung der eingegebenen Parameter / zurückgegebenen Ergebnisse.

Das Hauptproblem, dem wir uns jetzt gegenübersehen, ist, dass das@Gülti Annotation wird vor dem Aspekt behandelt, bevor und nachdem der Code tatsächlich ausgeführt wird.

Haben Sie eine Idee, wie wir die Validierungsprüfung in unserem AOP-Code ausführen können? Ich weiß, dass es eine Möglichkeit gibt, dies zu tun, indem man den Validator innerhalb der Methode manuell aufruft, aber ich möchte den vorhandenen Code nicht so sehr berühren ... also keine anderen Ideen als diese, wenn es solche gibt ...

Im Moment ist die Ausführungsreihenfolge wie folgt:

Validierungsprüfung - Ausgelöst durch die @ValidierungsprüfungEigener Code - Aspekt - vor dem MethodenaufrufAktueller MethodenaufrufEigener Code - Aspekt - nach Methodenaufruf

Und wir hätten gerne etwas Ähnliches (zuerst unseren Code und dann die gültige Anmerkung):

Eigener Code - Aspekt - vor dem MethodenaufrufValidierungsprüfung - Ausgelöst durch die @ValidierungsprüfungAktueller MethodenaufrufEigener Code - Aspekt - nach Methodenaufruf

Bitte überspringen Sie Compiler-Fehler oder ähnliches. Dieser Code dient nur zu Demonstrationszwecken und ist nicht der eigentliche Code:)

Antworten auf die Frage(0)

Ihre Antwort auf die Frage