In meinem Controller habe ich eine Methode wie unten:Wie überprüft man die Argumentwertformatierung vor der Controllermethode?
public QueryResult<TrsAccount> listExclude(String codeAccount, String searchFilter, String order, int pageNumber,
int pageSize){}
Aber bevor Sie diese Methode ausführen ich, wenn chech haben:
Assert.TRUE(codeAccount.matches("^[0-9]{1,20}$"));
Da dies in meiner Anwendung ist sehr häufig und es ist nicht nur in diesem Fall möchte ich einen allgemeinen Ansatz, um das Argument Format zu überprüfen. So wie ich jetzt bin mit der Verwendung von AOP, in denen:
@Aspect
public class HijackBeforeMethod {
@Pointcut("within(@org.springframework.stereotype.Controller *)")
public void controllerBean() {
}
@Pointcut("execution(* *(..))")
public void methodPointcut() {
}
@Before(value = "controllerBean() && methodPointcut()", argNames = "joinPoint")
public void before(JoinPoint joinPoint) {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Object[] args = joinPoint.getArgs();
String[] paramNames = signature.getParameterNames();
for (int count = 0; count < paramNames.length; count++) {
String tempParam = paramNames[count];
Object tempValue = args[count];
if (tempParam.toLowerCase().equalsIgnoreCase("codeAccount") && Assert.isNotNull(tempValue)
&& Assert.isNotEmpty((String) tempValue)) {
Assert.TRUE(((String) tempValue).matches("^[0-9]{1,20}$"));
}
}
}
}
Wie Sie sehen können, ist dies sehr rudimentär und fehleranfällig Code-Schnipsel. Gibt es bessere Lösungen?
Nur nicht ... Verwenden Sie ein Objekt und validieren Sie das mit JSR303-Validierung oder einem benutzerdefinierten Validator. –