2015-09-30 26 views
10

Tôi đang sử dụng Spring Boot v1.2.5 để tạo ứng dụng REST. Trong khi tải lên hình ảnh, tôi có một kiểm tra kích thước tệp tối đa, được cung cấp thuộc tính:Làm cách nào để xử lý ngoại lệ kích thước tệp tối đa trong Spring Boot?

trong application.properties. Cơ sở này được cung cấp bởi Spring Boot. Bây giờ kiểm tra đang hoạt động đúng. Câu hỏi đặt ra là, làm cách nào để xử lý ngoại lệ và trả lại tin nhắn cho người dùng mà anh ta có thể hiểu?

Cập nhật 1 ----------

Tôi đã viết một phương pháp trong điều khiển của tôi, nơi tôi có ý định để xử lý các MultipartException, sử dụng @ExceptionHandler. Nó dường như không hoạt động.

Đây là mã của tôi:

@ExceptionHandler(MultipartException.class) 
@ResponseStatus(value = HttpStatus.PAYLOAD_TOO_LARGE) 
public ApplicationErrorDto handleMultipartException(MultipartException exception){ 
    ApplicationErrorDto applicationErrorDto = new ApplicationErrorDto(); 
    applicationErrorDto.setMessage("File size exceeded"); 
    LOGGER.error("File size exceeded",exception); 
    return applicationErrorDto; 
} 

Cập nhật 2 ----------

Sau @luboskrnac chỉ nó ra, tôi đã cố gắng tìm ra một giải pháp. Chúng tôi có thể sử dụng ResponseEntityExceptionHandler tại đây để xử lý trường hợp cụ thể này. Tôi tin rằng, chúng tôi cũng có thể đã sử dụng DefaultHandlerExceptionResolver, nhưng ResponseEntityExceptionHandler sẽ cho phép chúng tôi trả lại số ResponseEntity, trái ngược với phương pháp cũ, các phương pháp sẽ trả lại ModelAndView. Tuy nhiên, tôi không được sử dụng.

Đây là mã cuối cùng mà tôi đang sử dụng để xử lý các MultipartException: Swagger

@ControllerAdvice 
public class CustomResponseEntityExceptionHandler extends ResponseEntityExceptionHandler { 

private static final Logger LOGGER = Logger.getLogger(CustomResponseEntityExceptionHandler.class); 

@ExceptionHandler(MultipartException.class) 
@ResponseStatus(value = HttpStatus.PAYLOAD_TOO_LARGE) 
@ResponseBody 
public ApplicationErrorDto handleMultipartException(MultipartException exception){ 
    ApplicationErrorDto applicationErrorDto = new ApplicationErrorDto(); 
    applicationErrorDto.setMessage("File size exceeded"); 
    LOGGER.error("File size exceeded",exception); 
    return applicationErrorDto; 
} 
} 

Tôi đang sử dụng cho việc phát triển/tài liệu API REST. Đây là phản hồi khi tải lên tệp vượt quá kích thước. enter image description here Cảm ơn.

Trả lời

4

Spring Boot docs says:

Bạn cũng có thể sử dụng tính năng Spring MVC thường xuyên như @ExceptionHandler phương pháp và @ControllerAdvice. Sau đó, ErrorController sẽ nhận bất kỳ ngoại lệ không được xử lý nào.

Như MultipartException dường như hapen trước @Controller/@ExceptionHandler/@ControllerAdvice tính năng đi vào chơi, bạn nên sử dụng ErrorController để xử lý nó.

BTW, tôi tìm thấy số này thread in the meantime. bạn có thể muốn xem.

+0

Tôi đã thử làm điều đó. Tôi đã cố gắng xử lý các ngoại lệ tại địa phương trong bộ điều khiển của tôi bằng cách sử dụng ExceptionHandler, thay vì một wrapper toàn cầu bằng cách sử dụng ControllerAdvice, theo hướng dẫn trong các tài liệu bạn đã chia sẻ. Tôi đang cố gắng xử lý MultipartException trong phương thức. Nó dường như không hoạt động. @luboskrnac Vui lòng kiểm tra cập nhật 1. –

+0

Tôi đã sai, trước và sửa câu trả lời của tôi. Bạn muốn sử dụng ErrorController. – luboskrnac

+0

Cảm ơn bạn đã chỉ ra. Tôi đã cập nhật bài đăng của mình bằng giải pháp cuối cùng mà tôi đang sử dụng. –

Các vấn đề liên quan