2012-01-31 35 views
22

Tôi đang cố gắng để lập bản đồ url /locations/{locationId}/edit.html - đó dường như làm việc với mã này:PathVariable trong mùa xuân khiển

@Controller 
@RequestMapping("/locations") 
public class LocationController 
{ 
    @RequestMapping(value = "/{locationId}/edit.html", method = RequestMethod.GET) 
    public String showEditForm(Map<String, Object> map, @PathVariable int locationId) 
    { 
    map.put("locationId", locationId); 
    return "locationform"; 
    } 
} 

Gọi kết quả url đề cập trong một ngoại lệ:

java.lang.IllegalArgumentException: Name for argument type [int] not available, and parameter name information not found in class file either. 

Tôi có sử dụng chú thích @PathVariable không đúng cách không?

Cách sử dụng chính xác?

Trả lời

32

nó phải được @PathVariable("locationId") int locationId

+8

này được trình bày chi tiết ở đây, và sẽ xảy ra khi mã của bạn được biên dịch mà không cần thông tin gỡ lỗi (http: // docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html): ** nếu tên biến mẫu URI khớp với tên đối số của phương thức, bạn có thể bỏ qua chi tiết đó. Miễn là mã của bạn không được biên dịch mà không có thông tin gỡ lỗi, Spring MVC sẽ khớp tên đối số phương thức với tên biến mẫu URI ** –

+0

lưu ý rằng việc biên dịch bằng cách sử dụng "Debug As" sẽ không nhất thiết bao gồm thông tin gỡ lỗi trong dự án. Kiểm tra cài đặt của bạn, [như chi tiết ở đây] (http://stackoverflow.com/a/1318483/1412656), và về cơ bản kiểm tra tất cả các hộp kiểm tra âm thanh gỡ lỗi! –

16

Bạn nên thêm đối số value để bạn @PathVariable, ví dụ:

public String showEditForm(
     @PathVariable("locationId") int locationId, 
     Map<String, Object> map) { 
    // ... 
}