2014-09-05 6 views
3

У меня есть следующий контроллер:Запись для местного @ExceptionHandler

class Controller { 

    @ResponseStatus(HttpStatus.OK) 
    @RequestMapping(value = "/verifyCert", method = RequestMethod.GET) 
    public void verifyCertificate() throws CertificateExpiredException, CertificateNotYetValidException { 
     certificate.checkValidity(); 
    } 

    @ResponseStatus(HttpStatus.FORBIDDEN) 
    @ExceptionHandler({CertificateExpiredException.class, CertificateNotYetValidException.class}) 
    public void handleCertificateValidityException(Exception e) {} 
} 

Моя цель состоит в том, чтобы этот контроллер переадресовывает обработчик исключений, если сертификат не является действительным.

+0

Потому что это то, что у вас есть. Вы проверяете контроллер, а не оставшуюся инфраструктуру, если хотите, чтобы вам нужно было установить полный контекст приложения. –

+0

Обратите внимание на 'standaloneSetup'. Проверьте другие методы 'MockMvcBuilders'. –

ответ

2

При использовании standaloneSetup все, что вы делаете, выполняет настройку для конкретного контроллера.

Если вы не хотите, чтобы настроить контекст всего приложения (которое вы могли бы сделать с webAppContextSetup вместо standaloneSetup), вы можете вручную настроить обработчик исключений, изменив код:

@Before 
public void setup() throws IOException { 
    MockitoAnnotations.initMocks(this); 
    mockMvc = MockMvcBuilders.standaloneSetup(controller).setHandlerExceptionResolvers(new ExceptionHandlerExceptionResolver()).build(); 
} 

@Test 
public void test() throws Exception { 
    mockMvc.perform(get("/verifyCert.controller").contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)).andExpect(status().isForbidden()); 
} 

это работает потому ExceptionHandlerExceptionResolver класс, который Spring MVC использует для обработки исключений на основе @ExceptionHandler аннотацию

Заканчивать one из моих старых соответствующих ответов, охватывает все более сложный случай (использование @ControllerAdvice по классу который содержит @ExceptionHandler).

+0

Спасибо, я пробовал ваш подход. Но, к сожалению, я получаю следующую ошибку: org.springframework.web.util.NestedServletException: обработка запроса не удалась; inested exception is java.lang.NullPointerException – fashuser

+0

@fashuser Это странно! Я запускал этот код, и все работало, как ожидалось! Можете ли вы обновить свой вопрос с помощью этой информации? – geoand

+0

Я добавил полный вопрос о стеке. – fashuser

0

Недвижимость в вашем классе net.scansafe.scancentre21.springmvc.web.easyid.ManageSamlAuthenticationRealmController.verifySecondarySamlSpCertificate(ManageSamlAuthenticationRealmController.java) есть null.

Вы можете отладить метод класса, чтобы его найти. Вам нужно добавить @Autowired для этого свойства для инъекций.

Смежные вопросы