2016-06-10 16 views
10

Hãy xem xét các bản đồ sau:Java mùa xuân - làm thế nào để xử lý thiếu yêu cầu cần thông số

@RequestMapping(value = "/superDuperPage", method = RequestMethod.GET) 
public String superDuperPage(@RequestParam(value = "someParameter", required = true) String parameter) 
{ 
    return "somePage"; 
} 

Tôi muốn để xử lý thiếu trường hợp tham số bởi không thay đổi để required = false. Theo mặc định, lỗi 400 được trả lại, nhưng tôi muốn quay lại, hãy nói một trang khác. Làm thế nào để tôi đạt được điều này?

Trả lời

20

Nếu yêu cầu @RequestParam không có trong yêu cầu, Spring sẽ ném một ngoại lệ MissingServletRequestParameterException. Bạn có thể xác định một @ExceptionHandler trong bộ điều khiển tương tự hoặc trong một @ControllerAdvice để xử lý ngoại lệ rằng:

@ExceptionHandler(MissingServletRequestParameterException.class) 
public void handleMissingParams(MissingServletRequestParameterException ex) { 
    String name = ex.getParameterName(); 
    System.out.println(name + " parameter is missing"); 
    // Actual exception handling 
} 

Tôi muốn quay trở lại giả sử một trang khác. Làm thế nào để tôi đạt được điều này?

Khi Spring documentation trạng thái:

Giống như các phương pháp điều khiển tiêu chuẩn chú thích với một chú thích @RequestMapping , các đối số phương pháp và trở về giá trị của @ExceptionHandler phương pháp có thể được linh hoạt. Ví dụ: HttpServletRequest có thể được truy cập trong môi trường Servlet và PortletRequest trong môi trường Portlet. Kiểu trả về có thể là một String, được hiểu như là một tên xem, một đối tượng ModelAndView, một ResponseEntity, hoặc bạn cũng có thể thêm các @ResponseBody có giá trị trả về phương pháp chuyển đổi với bộ chuyển đổi tin nhắn và ghi vào sự luồng phản hồi.

+0

@Ali này hoạt động hoàn hảo. cảm ơn sự giúp đỡ của bạn. Ngoài ra, có cách nào để biết phương pháp nào đã ném ngoại lệ này? Tôi không thể tìm thấy nó trong 'printStack()'. – peech

+0

@peech Ngoại lệ chỉ bao gồm thông tin tên và thông số tên param. Vì vậy, Không, bạn không thể biết phương pháp nào ném ngoại lệ. –

2

Bạn có thể làm điều này với mùa xuân 4,1 trở đi và Java 8 bằng cách tận dụng các loại Tùy chọn. Trong ví dụ của bạn có nghĩa là @RequestParamString của bạn sẽ có loại Optional<String>.

Take a look at this article để có ví dụ trình bày tính năng này.

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