私は、いくつかのjaxrsアノテーションを複製せずにジェネリック抽象ジャンクションサービスを実装するのに苦労しています。ジェネリック抽象ジャンクションサービスを実装する
したがって、たとえば、ここに私のサービスと実体構造は次のとおりです。
AbstractEntity.java
import javax.xml.bind.annotation.XmlElement;
public abstract class AbstractEntity {
@XmlElement
private String name;
public String getName() {
return name;
}
}
AbstractService.java
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
public class AbstractService<T extends AbstractEntity> {
@POST
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.TEXT_PLAIN)
@Path("/details")
public Response getEntityDetails(final T entity) {
// just return the name of this entity
return Response.ok(entity.getName()).build();
}
}
実装は次のようです:
Car.java
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Car extends AbstractEntity {
@XmlElement
private String brand;
public String getBrand() {
return brand;
}
}
CarService.java
import javax.ws.rs.Path;
@Path("/cars")
public class CarService extends AbstractService<Car> {
// should provide the super getEntityDetails method with a Car entity
}
今私は(詳細を取得する/cars/details
に私の車のエンティティを投稿したい実装されている名前 "A5" を返します抽象サービスで):
POST /cars/details
<car>
<brand>Audi</brand>
<name>A5</name>
</car>
残念ながら、私は私のサービスに投稿するとき、それは言う:
JAXRSUtils W .No message body reader found for request class : AbstractEntity, ContentType : application/xml.
WebApplicatio W WebApplicationException has been caught : no cause is available
次のように私は私のCarService
を実装する場合、私は、それを修正することができます。
CarService.java
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path("/cars")
public class CarService extends AbstractService<Car> {
@POST
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.TEXT_PLAIN)
@Path("/details")
@Override
public Response getEntityDetails(final Car entity) {
return super.getEntityDetails(entity);
}
}
そして、すべて削除します抽象サービスからのjaxrs注釈:
AbstractService.java
import javax.ws.rs.core.Response;
public class AbstractService<T extends AbstractEntity> {
public Response getEntityDetails(final T entity) {
// just return the name of this entity
return Response.ok(entity.getName()).build();
}
}
ポイントは、それが常に同じ(同じ定型なので、私はこれらのCarService
実装の約60持っていると私はそれが各サービスにおけるjaxrs注釈のすべてとgetDetails
方法を繰り返したくないということであり、 )。
これに関するアイデアや解決策はありますか?