Ich benutze @ControllerAdvice
alle Ausnahmen meine app zu behandeln:Order of @ExceptionHandler
@ControllerAdvice
public class ExceptionHandlingController {
@ExceptionHandler({UnauthorizedException.class})
public String unauthorizedException() {
.........
}
@ExceptionHandler({UnauthorizedAjaxException.class})
@ResponseBody
public void unauthorizedAjaxException() {
.........
}
@ExceptionHandler({Exception.class})
public String globalException(){
.........
}
}
Und irgendwo in meinem Code ich tun throw new UnauthorizedException();
@Around("@annotation(Authenticated)")
public Object profilingAuthentication(ProceedingJoinPoint pjp) throws Throwable {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
if(request.getSession().getAttribute("idContact") == null) {
if("XMLHttpRequest".equals(request.getHeader("X-Requested-With")))
throw new UnauthorizedAjaxException();
throw new UnauthorizedException();
}
return pjp.proceed();
}
Aber leider Spring MVC scheint zufällig zu handeln, indem Sie der allgemeinste Fall (Exception
) eher als spezifischere (UnauthorizedException
zum Beispiel). Und manchmal wählt er den richtigen!
Wie funktioniert der Auftrag? und gibt es eine Möglichkeit, die Reihenfolge anzugeben?
UnauthorizedException
ist eine benutzerdefinierte Ausnahme
public class UnauthorizedException extends Exception {
public UnauthorizedException(){
super();
}
public UnauthorizedException(String message){
super(message);
}
}
UPDATE
i, dass der Auftrag es ist nicht tatsächlich die Methoden herausgefunden Rondom die UnauthorizedException
Werke normalerweise werfen, aber die anderen nicht!
@Authenticated
@RequestMapping(value="/favoris")
public String favoris(ModelMap model, HttpServletRequest request)
throws UnauthorizedException {
....
}
@Authenticated
@RequestMapping(value="/follow")
public String follow(ModelMap model, HttpServletRequest request) {
.....
}
So habe ich throws UnauthorizedException
manuell hinzuzufügen, oder gibt es eine andere Lösung?
Schlägst du vor, sie sollten einen einzigen 'ExceptionHandler' für ihre Anwendung haben? –
Ich schlage NICHT vor, einen einzigen ExceptionHandler zu haben. – developer
Können Sie klären, wie _Sie den Auftrag_ setzen können? Ich denke, das ist es, was sie fragen. –