我正在使用Play 2.2.x with Java并尝试将继承与PathBindable一起使用。
假设我有一个抽象的父类“Vehicle”,其子类为“Car”和“Truck”(见下文)。我想在父类Vehicle上实现PathBindable。但是我似乎无法在我可以传递Car类型的变量作为URL参数的情况下工作。在尝试编译时,我收到错误:
[error] GET /open-trunk/:car controllers.CarThings.openTrunk(car: Car)
[error] /xxx/routes:xxx: No URL path binder found for type Car. Try to implement an implicit PathBindable for this type.
传递通用的Vehicle变量编译正常。
有没有人知道如何在不必将汽车作为车辆传递并使用控制器方法进行投射的情况下实现这一目标?
Vehicle.java
import play.mvc.PathBindable;
public abstract class Vehicle implements PathBindable<Vehicle> {
.... // Overrides for bind, unbind & javascriptUnbind
}
Car.java
public class Car extends Vehicle {
....
public void openUpTrunk() {
....
}
}
Truck.java
public class Truck extends Vehicle {
....
}
路由
....
GET /open-trunk/:car controllers.CarThings.openTrunk(car: Car)
....
CarThings.java
public class CarThings extends Controller {
public static openTrunk(Car car) {
car.openUpTrunk();
....
}
}
谢谢!