2010-11-19 40 views
15

Tôi không thể tìm ra cách xử lý nhiều loại ngoại lệ theo @ExceptionHandler.Spring @ExceptionHandler xử lý nhiều loại ngoại lệ

Tôi cần phải lập trình xử lý các ngoại lệ này, vì điều này tôi cần một tham chiếu được chia sẻ. Điều này có được thực hiện thông qua tham chiếu "Exception ex" này không? Tôi không nghĩ như vậy, gây ra ngoại lệ không bị bắt như thế này, làm thế nào tôi sẽ làm điều đó sau đó?

Tôi không thể đặt tất cả các tham chiếu ngoại lệ làm đối số cho phương thức xử lý, sẽ không có ý nghĩa, nó không thể được xử lý theo chương trình. Tôi cần một tài liệu tham khảo chia sẻ để tôi có thể sử dụng "instanceof" vào nó hoặc chỉ cần gửi nó ở một nơi khác như một vị tướng "ngoại lệ"

@ExceptionHandler({DescriptionCstOrderException.class, SpecializationCstOrderException.class, NoUploadFileException.class, 
        DeadLineCstOrderException.class, DocumentCstOrderException.class, CommentCstOrderException.class}) 
public String handleFormException(Exception ex, ActionRequest actionRequest) { 
    logger.error(ex.getMessage()); 
    SessionErrors.add(actionRequest, ex.getClass().getName()); 
    return "mainOrderForm"; 
    } 

câu hỏi khác: những gì nếu tôi muốn xử lý org.springframework.web.multipart .MaxUploadSizeExceededException, không được ném từ bất kỳ phương thức nào của trình xử lý? Bởi vì @ExceptionHandler chỉ bắt được các ngoại lệ được ném từ một trong các phương thức xử lý.

Phương pháp ngoại lệHandler có thể được đặt vào một số bộ điều khiển cha mẹ mở rộng nhưng nếu người dùng chỉ sử dụng mặc địnhAnnotationHandlerMapping ...?

Đánh giá cao bất kỳ sự giúp đỡ, tôi sẽ điên, điều này rất bực bội ....

Trả lời

15

Giá trị @ExceptionHandler có thể được thiết lập để một mảng của các loại ngoại lệ. Nếu một ngoại lệ được ném khớp với một trong các loại trong danh sách, thì phương thức được chú thích bằng @ExceptionHandler phù hợp sẽ được gọi. Nếu giá trị chú thích không được đặt thì các loại ngoại lệ được liệt kê dưới dạng đối số phương thức được sử dụng. Xem chi tiết documentation.

0

Câu hỏi của bạn là khá khó hiểu nhưng phương pháp xử lý ngoại lệ của bạn sẽ chỉ xử lý một ngoại lệ tại một thời điểm. Nó sẽ không bắt được nhiều ngoại lệ và sau đó chuyển cả hai vào trong phương thức handleFormException() của bạn. Nếu bạn cần xử lý các loại ngoại lệ này một cách khác nhau thì bạn nên tạo một phương thức xử lý ngoại lệ cho mỗi loại, chỉ định một đối số của kiểu Ngoại lệ cụ thể đó cho phương thức của bạn, và sau đó thực hiện xử lý thích hợp. Ví dụ:

@ExceptionHandler(DescriptionCstOrderException.class) 
public String handleDescriptionCstOrderException(DescriptionCstOrderException exception, ActionRequest actionRequest) {...} 


@ExceptionHandler(SpecializationCstOrderException.class) 
public String handleSpecializationCstOrderException(SpecializationCstOrderException exception, ActionRequest actionRequest) {...} 

// and so on... 

Vui lòng tham khảo các tài liệu hướng mùa xuân để biết thêm thông tin:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-exceptionhandler

+0

Tôi muốn xử lý chúng theo cùng một cách. Tôi đặt chúng vào sessionErrors và viewlayer và javascript xử lý chúng khác nhau sau đó. Những gì tôi muốn biết là, cho dù mẫu của tôi là chính xác, bởi vì phương pháp handleFormException không bắt ngoại lệ của một trong các loại được đề cập trong danh sách giá trị chú thích ... – lisak

+0

nếu tôi khai báo một phương thức cho một loại ngoại lệ, công việc ... thật kỳ lạ ... Btw, bạn có biết cách xử lý các ngoại lệ được ném ra ngoài trình xử lý không? Ý tôi là sử dụng @ExceptionHandlers ... Khi tôi hỏi câu hỏi bổ sung ... – lisak

17

Tôi chỉ thêm vào câu trả lời NimChimpsky "Giá trị @ExceptionHandler có thể được đặt thành một mảng loại ngoại lệ". Việc thực hiện của việc sử dụng mảng ngoại lệ như đã đề cập trong mùa xuân documentation sẽ như thế nào

@ExceptionHandler({NotFoundException.class,MissingServletRequestParameterException.class})