The example works. The operations are hidden as part of the sample to show how they can be filtered for security purposes.
Try loading the swagger.json as: http://localhost:8002/api/swagger.json?api_key=special-key I can’t really tell why it doesn’t work for you. Two suggestions: 1. Add @ApiOperation to the operation itself. 2. Since it looks like you’re actually just trying to hide the @BeanParam, try adding the @ApiParam(hidden=true) next to it: public Response post(@BeanParam @ApiParam(hidden-true) MyParams params,@Valid Body body) From: <[email protected]> on behalf of "Théo A. Monteiro" <[email protected]> Reply-To: "[email protected]" <[email protected]> Date: Thursday, 6 April 2017 at 9:33 To: Swagger <[email protected]> Subject: Re: Duplicated body fields with @BeanParam and JSON body I tried the sample. It doesn't work either - I think it must be revised. When I try to run jetty the index page is rendered without any CSS or JS and doesn't work. The swagger.json generated doesn't describe the /store resource. I tried to copy the method placeOrder into PetResource.java, since it has my scenario with a @Beanparam and a body, but it never shows on the swagger.json. It seems swagger is only processing methods with @GET, @PUT and @POST are ignored in this sample. On Thursday, April 6, 2017 at 11:11:26 AM UTC-3, tony tam wrote: Can you look at this example? https://github.com/swagger-api/swagger-samples/blob/3f18a37866083d3ee6c7e4e4161e26a5c976309d/java/java-jersey2/src/main/java/io/swagger/sample/resource/PetStoreResource.java#L41 On Apr 6, 2017, at 9:48 AM, Théo A. Monteiro <[email protected]> wrote: Moving the annotations to the getters made no difference. I tried with both swagger-jaxrs and swagger-jersey2-jaxrs. On Thursday, April 6, 2017 at 10:20:38 AM UTC-3, tony tam wrote: Try putting the annotation on the getter vs. the private field. On Apr 6, 2017, at 9:19 AM, Théo A. Monteiro <[email protected]> wrote: In MyParams.java in the example the properties are @HeaderParam and @Context. Why swagger-core is parsing as another body? On Thursday, April 6, 2017 at 10:11:32 AM UTC-3, tony tam wrote: You need to set your @BeanParam properties to be either @HeaderParam, @PathParam or @QueryParam. Without one of these modifiers, it will be treated as a body parameter. In the definition there can be only one body param On Apr 6, 2017, at 9:06 AM, Théo A. Monteiro <[email protected]> wrote: Hi, Swagger is creating two body fields when I try to use a @BeanParam and a JSON body. I tried to use swagger-jaxrs and swagger-jersey2-jaxrs [1][2], but both result the same problem. Is there any way to circumvent this? [1]. https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-JAX-RS-Project-Setup-1.5.X [2]. https://github.com/swagger-api/swagger-core/issues/1720 This is a PoC that shows the problem: pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>unrested</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <properties> <version.jboss.bom.eap>7.0.4.GA</version.jboss.bom.eap> <version.wildfly.maven.plugin>1.0.2.Final</version.wildfly.maven.plugin> </properties> <build> <pluginManagement> <plugins> <plugin> <groupId>org.wildfly.plugins</groupId> <artifactId>wildfly-maven-plugin</artifactId> <version>${version.wildfly.maven.plugin}</version> <configuration> <port>9994</port> </configuration> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build> <dependencyManagement> <dependencies> <dependency> <groupId>org.jboss.bom</groupId> <artifactId>jboss-eap-javaee7-with-tools</artifactId> <version>${version.jboss.bom.eap}</version> <scope>import</scope> <type>pom</type> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.jboss.spec.javax.ws.rs</groupId> <artifactId>jboss-jaxrs-api_2.0_spec</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jackson2-provider</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxrs</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-jaxrs</artifactId> <version>1.5.13</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0.redhat-1</version> <scope>provided</scope> </dependency> </dependencies> </project> RestActivator.java package org.example.un.rest; import java.util.HashSet; import java.util.Set; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; import org.reflections.Reflections; import io.swagger.annotations.Api; import io.swagger.jaxrs.config.BeanConfig; import io.swagger.models.Info; import io.swagger.models.Swagger; @WebListener @ApplicationPath("/rest") public class RestActivator extends Application implementsServletContextListener { @Override public Set<Class<?>> getClasses() { Set<Class<?>> classes = new HashSet<>(super.getClasses()); classes.add(io.swagger.jaxrs.listing.ApiListingResource.class); classes.add(io.swagger.jaxrs.listing.SwaggerSerializers.class); Reflections reflections = newReflections(RestActivator.class.getPackage().getName()); classes.addAll(reflections.getTypesAnnotatedWith(Api.class)); return classes; } private Swagger configSwagger(ServletContextcontexto) { Swagger swagger = newSwagger().info(this.getSwaggerInfos()); return swagger; } private Info getSwaggerInfos() { BeanConfig config = new BeanConfig(); config.setVersion("0.1"); config.setResourcePackage(RestActivator.class.getPackage().getName()); config.setPrettyPrint(true); config.setScan(); return config.getInfo(); } @Override public void contextInitialized(ServletContextEventsce) { ServletContext contexto =sce.getServletContext(); Swagger swagger = this.configSwagger(contexto); contexto.setAttribute("swagger", swagger); } @Override public void contextDestroyed(ServletContextEvent sce){ } } Endpoint.java package org.example.un.rest.ed; import javax.validation.Valid; import javax.ws.rs.BeanParam; 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; import org.example.un.rest.ed.params.MyParams; import org.example.un.rest.json.Body; import io.swagger.annotations.Api; @Path("/ed") @Api("ed") @Produces({ MediaType.APPLICATION_JSON }) public class Endpoint { @POST @Consumes({ MediaType.APPLICATION_JSON,MediaType.TEXT_PLAIN }) public Response post(@BeanParam MyParams params,@Valid Body body) { //Do things with params.getOauthToken(), params.getUriInfo() and body return Response.ok().build(); } } MyParams.java package org.example.un.rest.ed.params; import javax.ws.rs.HeaderParam; import javax.ws.rs.core.Context; import javax.ws.rs.core.UriInfo; import io.swagger.annotations.ApiParam; public class MyParams { @HeaderParam("Authorization") @ApiParam(hidden = true) //It must be true, since after authorization swagger sends the token private String oauthToken; @Context private UriInfo uriInfo; public String getOauthToken() { return oauthToken; } public void setOauthToken(String oauthToken) { this.oauthToken = oauthToken; } public UriInfo getUriInfo() { return uriInfo; } public void setUriInfo(UriInfo uriInfo) { this.uriInfo = uriInfo; } } Body.java package org.example.un.rest.json; import javax.validation.constraints.NotNull; public class Body { @NotNull private String firstField; @NotNull private String secondField; public String getFirstField() { return firstField; } public String getSecondField() { return secondField; } } I am using JBOSS EAP 7 to host the application. Thanks for the attention and sorry about any language mistakes, English is not my native language. -- You received this message because you are subscribed to the Google Groups "Swagger" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Swagger" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Swagger" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Swagger" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Swagger" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
