2016-10-30 2 views
1

Я реализовал 2 ControllersAdvice для. обрабатывать исключение CommonAdvice и UserAdviceКак установить приоритет в ExceptionHandling через ControllerAdvice

Общие Advice

@ControllerAdvice(annotations = RestController.class) 
public class CommonAdvice { 

    @ExceptionHandler(Exception.class) 
    public ResponseEntity<ExceptionBean> handleException(Exception e) { 
     ExceptionBean exception = new ExceptionBean(Causes.ANOTHER_CAUSE); 
     return new ResponseEntity<ExceptionBean>(exception, HttpStatus.INTERNAL_SERVER_ERROR); 
    } 

} 

UserAdvice

@ControllerAdvice(assignableTypes = { requestUserMapper.class }) 
public class UserAdvice { 

    @ExceptionHandler(NotUniqueUserLoginException.class) 
    public ResponseEntity<ExceptionBean> handleAlreadyFound(NotUniqueUserLoginException e) { 
     System.out.println("this is me : " + Causes.USER_ALREADY_EXIST.toString()); 
     ExceptionBean exception = new ExceptionBean(Causes.USER_ALREADY_EXIST); 
     return new ResponseEntity<ExceptionBean>(exception, HttpStatus.INTERNAL_SERVER_ERROR); 
    } 

И теперь, когда я бросаю NotUniqueUserException, это CommonAdvice которые обрабатывают и исключение.

Я тестировал и UserAdvice отлично работает. Есть ли способ установить приоритет для этих классов?

@Edit - добавить Controllel Mapping

@RequestMapping(value = "add", method = RequestMethod.POST) 
public ResponseEntity<GT_User> addUser(@RequestBody GT_User newUser) throws NotUniqueUserLoginException, Exception { 

    if (this.userService.exist(newUser.getLogin())) { 
     throw new NotUniqueUserLoginException(Causes.USER_ALREADY_EXIST.toString()); 
    } else { 
     GT_User addesUser = this.userService.addUser(newUser); 
     return new ResponseEntity<GT_User>(addesUser, HttpStatus.OK); 
    } 
} 
+0

может вы предоставляете фактический код контроллера и исключение stacktrace? – developer

+0

вот вы. Но, как я уже сказал, когда. hasleException() прокомментирован, handleAlreadyFound() отлично работает. Когда я добавляю handleAlreadyfound() int того же класса, перед handleException), он тоже работает. Итак, это только проблема с piority ... Я думаю .. – VANILKA

+0

OK ... извините ... Я нашел решение. Проблема была ... МОЙ АНГЛИЙСКИЙ ... Я искал приоритет. вместо ORDER ... Простая аннотация @Order разрешает мою проблему. – VANILKA

ответ

1

Чтобы установить более высокий приоритет на ControllerAdvice на оных:

import org.springframework.core.Ordered; 
import org.springframework.core.annotation.Order; 
import com.genealogytree.webapplication.dispatchers.requestUserMapper; 

@ControllerAdvice(assignableTypes = { requestUserMapper.class }) 
@Order(Ordered.HIGHEST_PRECEDENCE) 
public class UserAdvice { 
... 
} 

Чтобы установить Понизить приоритет на ControolerAdvice на добавить

import org.springframework.core.Ordered; 
import org.springframework.core.annotation.Order; 
import com.genealogytree.webapplication.dispatchers.requestUserMapper; 

@ControllerAdvice(assignableTypes = { requestUserMapper.class }) 
@Order(Ordered.LOWEST_PRECEDENCE) 
public class CommonAdvice { 
... 
} 
Смежные вопросы