2016-03-18 17 views
7

Trong mô-đun play-swagger, chúng tôi sử dụng play.routes.compiler.RoutesFileParser để có được tất cả các tuyến đã đăng ký khỏi Play và tiếp tục phân tích chúng vào một tài liệu API:Lập trình các tuyến đường trong Play! Khung 2.5.x

val parsedRoutes = RoutesFileParser.parse(new File(app.classloader.getResource(routesFile).toURI)) 
val routes = parsedRoutes.right.get.collect { 
    case (route: PlayRoute) => { 
    logger.debug(s"Adding route '$route'") 
    Seq(route.copy(path = route.path.copy(parts = StaticPart(prefix + "/") +: route.path.parts))) 
    } 
    case (include: PlayInclude) => { 
    logger.debug(s"Processing route include $include") 
    parseRoutesHelper(playRoutesClassNameToFileName(include.router), include.prefix) 
    } 
}.flatten 

Điều này dẫn đến các lỗi sau: java.lang.NoClassDefFoundError: play/routes/compiler/RoutesFileParser

Có vẻ như là RoutesFileParser đã trở thành riêng tư trong Play! 2.5.

Cách chính xác để tìm nạp tất cả các tuyến đường như trong ví dụ trên là gì?

+1

Tôi đã kiểm tra lịch sử git của RoutesFileParser và tôi không tìm thấy bất kỳ thay đổi quan trọng nào từ 2.4.0. Đối tượng được công khai với phương thức phân tích công khai và lớp là riêng tư vì nó là để chơi 2.4.0. https://github.com/playframework/playframework/commits/master/framework/src/routes-compiler/src/main/scala/play/routes/compiler/RoutesFileParser.scala Đây không phải là câu trả lời cho câu hỏi của bạn nhưng có thể vấn đề là ở nơi khác, thiếu thư viện, phiên bản sai, ... –

Trả lời

1

Đây chắc chắn là vấn đề phụ thuộc. Kiểm tra dependencyTree.

Nếu đó là chưa có, sau đó thêm dòng sau vào việc xây dựng hồ sơ:

"com.typesafe.play" %% "routes-compiler" % "2.5.0" 

Sau đó, điều này sẽ biên dịch và chạy độc đáo:

val routesURI = app.classloader.getResource("routes").toURI 
val parsedRoutes = play.routes.compiler.RoutesFileParser.parse(new File(routesURI)) 
println(parsedRoutes) 

(nơi ứng dụng là một trường hợp chạy chơi .api.Application)

0

Khi xem qua mã nguồn của Play, tôi thấy rằng tôi có thể sử dụng như sau:

class HomeController @Inject() (router: Provider[Router]) { 
.... 
    router.get().documentation.foreach(println) 
.... 
} 

Thao tác này sẽ in ra các bộ dữ liệu chuỗi bằng phương thức HTTP, đường dẫn, lời gọi phương thức. Đây là cách các tuyến đường trên trang DEV 404 được hiển thị.

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