2015-05-21 22 views
10

Tôi có một bộ điều khiển cần hoạt động khác với các tham số URL khác nhau. Một cái gì đó như thế này:Phương thức điều khiển quá tải trong Java Spring

@RequestMapping(method = RequestMethod.GET) 
public A getA(@RequestParam int id, @RequestParam String query) { 
    ... 
} 


@RequestMapping(method = RequestMethod.GET) 
public A getA(@RequestParam int id) { 
    ... 
} 

Nhưng điều này dường như không làm việc, tôi nhận được ngoại lệ sau đây:

org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping found. Cannot map '[controller name]' bean method 

Có một cách mà các ứng dụng chọn phương pháp tùy thuộc vào params URL?

+0

Giải thích _doesn't dường như work_. Bạn mong đợi nó làm gì? Tại sao bạn có những kỳ vọng đó? Nó thực sự hoạt động như thế nào? –

+0

Cảm ơn bạn đã đặt câu hỏi, tôi đã mở rộng bài đăng của mình. – wildthing

+0

Chỉ cần sử dụng một phương thức và đặt '@ RequestParam'' required' thành 'false'. –

Trả lời

27

Chỉ ra trong các bản đồ mà params nên có mặt

@RequestMapping(method = RequestMethod.GET, params = {"id", "query"}) 
public A getA(@RequestParam int id, @RequestParam String query) { 
    ... 
} 


@RequestMapping(method = RequestMethod.GET, params = {"id"}) 
public A getA(@RequestParam int id) { 
    ... 
} 
Các vấn đề liên quan