Предоставить интерфейс через WebService

Я хотел бы предоставить интерфейс через веб-службу. Вместо «представления интерфейса» раскрывается фактическая реализация.

Пример:

@XmlRootElement
public interface Foo extends Serializable {    
    String getId();
}

@XmlRootElement
public class MyFoo implements Foo {
    private String id;
    private String bar;
    // Getter / Setter
}


@GET
@Path("myfoo")
@Produces(MediaType.APPLICATION_XML)
public MyFoo myFoo() {
    MyFoo foo = new MyFoo();
    foo.setId("myfoo");
    foo.setBar("bar");
    return foo;
}

Этот метод веб-службы даст ожидаемый результат, например

<myFoo>
  <bar>bar</bar>
  <id>myfoo</id>
</myFoo>

Проблема возникает, когда я пытаюсь открыть только вид интерфейса:

@GET
@Path("foo")
@Produces(MediaType.APPLICATION_XML)
public Foo foo() {
    MyFoo myFoo = new MyFoo();
    myFoo.setId("foo");
    myFoo.setBar("bar");
    Foo foo = myFoo;
    return foo;
}

Это даст результат:

<myFoo>
  <bar>bar</bar>
  <id>foo</id>
</myFoo>

Но я ожидаю такого ответа:

<foo>
  <id>foo</id>
</foo>

Как я могу этого добиться?


person stg    schedule 27.07.2016    source источник
comment
На самом деле я не думаю, что есть способ сделать это с помощью API; В частности, процессор Джексона имеет аннотацию JsonView, которая позволяет вам это делать. Пример: http://stackoverflow.com/questions/26775106/jsonview-of-jackson-not-working-with-jax-rs   -  person Gimby    schedule 08.08.2016