2015-01-05 14 views
6

Użyłem narzędzia swagger w moim projekcie cache apache, użyłem adnotacji @Api i @ApiOperations oraz @ApiParam i wygenerowałem dokument api dla pozostałych usług.Wyklucz modele lub właściwości z odpowiedzi typu "swagger".

Ale chcę wykluczyć niektóre z pól, takich jak EntityTag, StatusType i MediaType itp. Z atrybutu Models lub pełnego modułu lub atrybutu właściwości.

Jak to zrobić?

Pobierałem dane z db i ustawiając je w obiekcie użytkownika i przekazując ten obiekt użytkownika do konstruktora odpowiedzi JAX-RS.

Poniżej jest jednym z moich DTO obiektu:

@ApiModel 
    public class User{ 
    private String name; 
    private String email; 


@ApiModelProperty(position = 1, required = true, notes = "used to display user name") 
public int getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name= name; 
} 

@ApiModelProperty(position = 2, required = true, notes = "used to display user email") 
public int getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email= email; 
} 

Teraz nie widzę pola lub właściwości obiektu użytkownika wewnątrz Swagger zwrócone w formacie JSON.

mój serwis metoda klasy odpowiedź brzmi:

@GET 
    @ApiOperation(value = "xxx", httpMethod = "GET", notes = "user details", response = Response.class) 
    public Response getUserInfo(){ 
     User userdto = userdaoimpl.getUserDetails(); 
     ResponseBuilder builder = Response.ok(user, Status.OK), MediaType.APPLICATION_JSON); 
     builder.build(); 
} 


<bean id="swaggerConfig" class="com.wordnik.swagger.jaxrs.config.BeanConfig"> 
    <property name="resourcePackage" value="com.services.impl" /> 
    <property name="version" value="1.0.0" /> 
    <property name="basePath" value="http://localhost:8080/api" /> 
    <property name="license" value="Apache 2.0 License" /> 
    <property name="licenseUrl" 
     value="http://www.apache.org/licenses/LICENSE-2.0.html" /> 
    <property name="scan" value="true" /> 
</bean> 
+0

Którą wersję Swagger-core używasz? – Ron

Odpowiedz

15

Przede wszystkim, należy uaktualnić do najnowszej wersji swagger-core, obecnie 1.3.12 (używasz bardzo starej).

Masz 3 sposoby na ukrycie własności:

  1. Jeśli używasz adnotacji JAXB, można użyć @XmlTransient.
  2. Jeśli używasz Jacksona, możesz użyć @JsonIgnore.
  3. Jeśli nie korzystasz z żadnego z nich lub nie chcesz wpływać na ogólny de/serializację modeli, możesz użyć funkcji Swagger's @ApiModelProperty's hidden attribute.

Należy pamiętać, że może być konieczne ustawienie ich na swoich programach pobierających/ustawiających, a nie na samej właściwości. Graj z definicjami, aby zobaczyć, co działa dla Ciebie.

Jeśli chodzi o problem z modelem użytkownika, problem polega na tym, że nie odwołujesz się do niego z poziomu @ApiOperation (nie potrzebujesz również właściwości httpMethod). Spróbuj zmienić go w następujący sposób:

@ApiOperation(value = "xxx", notes = "user details", response = User.class) 
+0

Te pola są częścią obiektu DTO. swagger-core nie wynajduje pól;) – Ron

+0

Nie rozumiem, co masz na myśli przez "model wewnętrzny". Mówisz, że udało Ci się skutecznie ukryć pola, więc nie jestem pewien, co próbujesz rozwiązać. – Ron

+0

Zobacz moje zaktualizowane pytanie ..! Dlaczego nie pokazuje właściwości obiektu użytkownika. Pokazuje EntityTag, MediaType itp. Zamiast obiektu User..did masz moje pytanie – LazyGuy

Powiązane problemy