Не то чтобы я знал.По крайней мере, не так, как настроен ваш текущий метод.
Вот способ получить такую функциональность, но для этого потребуется другая архитектура вашего кода ...
1) Используйте Response иКлассы ResponseBuilder, чтобы обернуть ваши объекты.Это не только позволит вам настраивать статус ответа, но вы также можете позволить одному методу отвечать на QueryParams и настраивать сущность, которую вы доставляете, что приводит к ...
2) Если вам нужно доставитьнесколько версий ваших сущностей затем создайте для них Фасады.По сути, просто создайте классы, которые содержат структуру того, как вы хотели бы, чтобы ваши ответы JSON выглядели.В вашем случае один будет представлять дочерние ресурсы как строки URL, а другой просто будет содержать дочерние объекты.
public class ParentResource{
@GET
@Produces("application/json")
public Response getParent(
@Context UriInfo uriInfo
, @DefaultValue("false") @QueryParam("cascade") Boolean cascade
) {
if(cascade)
//This assumes that your ParentEntity stores the child objects already.
return Response.ok().entity(new ParentEntity).build();
else
return Response.ok().entity(new ParentFacadeWithURLS(uriInfo)).build();
}
}
РЕДАКТИРОВАТЬ # 1 2012.03.07
public class AResource {
@GET
@Produces("application/json")
public Map<String, Object> getRoot(
@Context final UriInfo info
, @DefaultValue("false") @QueryParam("cascade") Boolean cascade
) {
final Map<String, Object> toReturn = new HashMap<String, Object>();
final String[] children = { "one", "two", "thrée" };
if(cascade){
ChildResource cr= new ChildResource();
toReturn.put(child, cr.getRoot(uriInfo));
} else {
final UriBuilder builder = info.getAbsolutePathBuilder().path("{child}");
for (final String child : children) {
toReturn.put(child, builder.build(child).toASCIIString());
}
}
return toReturn;
}
@GET
@Path("{child:(one|two|thrée)}")
public ChildResource getChild(@PathParam("child") final String child) {
ChildResource cr = new ChildResource();
return new cr.getRoot(child);
}
}