2013-03-21 2 views
0

все, мой контроллер:весна @ExceptionHandler

@RequestMapping(method = RequestMethod.GET, value = "/search") 
@ResponseBody 
public CemeteryRestResponse<List<String>> search(
     @RequestParam("location") Location location) { 
    CemeteryRestResponse<List<String>> restResponse = new CemeteryRestResponse<List<String>>(); 
    restResponse.setBody(new ArrayList<String>()); 
    Long a = Long.valueOf("aaaa"); 
    try { 
     for (PublicCemetery cemetery : cemeteryDao.findByLocation(location)) { 
      restResponse.getBody().add(cemetery.getNameCn()); 
     } 
    } catch (Exception e) { 
     try { 
      throw new SQLException(); 
     } catch (SQLException e1) { 
      e1.printStackTrace(); 
     } 
    } 
    restResponse.setSuccess(true); 
    return restResponse; 
} 

мой execption дескриптор метода в том же контроллере:

@ExceptionHandler(value = { Exception.class, SQLException.class, 
     IllegalArgumentException.class, NumberFormatException.class }) 
@ResponseBody 
public CemeteryRestResponse<String> exceptionHandler(Exception e, 
     SQLException e2, IllegalArgumentException e3, 
     NumberFormatException e4) { 
    CemeteryRestResponse<String> restResponse = new CemeteryRestResponse<String>(); 
    restResponse.setFailureMessageCn("data base exception"); 

    restResponse.setSuccess(false); 
    return restResponse; 
} 

, когда метод поиска trhow SQLException и NumberFormatException @ExceptionHandler не может справиться. Спасибо!

+0

вы не бросать исключение из метода, все методы обрабатываются с помощью 'try..catch' методы –

ответ

0

Вы улавливаете Exception (ВСЕ исключения), а затем бросаете новый SQLException. Затем вы сразу же поймаете это SQLException и распечатаете его стек. Метод поиска будет НИКОГДА не вызывает никаких исключений.

Снимите Try-фиксатор вокруг

throw new SQLException(); 

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

+0

она до сих пор не работает. при необходимости xml config? – wilson

0

Не исключено исключение из метода обработчика запроса, вы сами обрабатываете все исключения.

Обработчик исключений вступает в силу только в том случае, если обработчик запроса выдает исключение обратно в весеннюю структуру.

@RequestMapping(method = RequestMethod.GET, value = "/search") 
@ResponseBody 
public CemeteryRestResponse<List<String>> search(
     @RequestParam("location") Location location) throws Exception{ 
    CemeteryRestResponse<List<String>> restResponse = new CemeteryRestResponse<List<String>>(); 
    restResponse.setBody(new ArrayList<String>()); 
    Long a = Long.valueOf("aaaa"); 
    for (PublicCemetery cemetery : cemeteryDao.findByLocation(location)) { 
     restResponse.getBody().add(cemetery.getNameCn()); 
    } 
    restResponse.setSuccess(true); 
    return restResponse; 
} 
+0

Спасибо, что ответили. но fllow ваш ответ он все еще не может справиться. при необходимости xml config? – wilson

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