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] > <javascript:>> wrote: > > Hi, > > Swagger is creating two body fields when I try to use a @BeanParam and a > JSON body. > > > <https://lh3.googleusercontent.com/-q-OwrlNumTE/WOY8Nq3dE7I/AAAAAAAAfHY/BZkiVTYcaf8tp3nM-uUOhq2BIZ-GuwytgCLcB/s1600/Screenshot%2Bfrom%2B2017-04-06%2B09-58-55.png> > > <https://lh3.googleusercontent.com/-q-OwrlNumTE/WOY8Nq3dE7I/AAAAAAAAfHY/BZkiVTYcaf8tp3nM-uUOhq2BIZ-GuwytgCLcB/s1600/Screenshot%2Bfrom%2B2017-04-06%2B09-58-55.png> > > 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.0 > http://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 implements > ServletContextListener { > > @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 = new Reflections(RestActivator.class. > getPackage().getName()); > classes.addAll(reflections.getTypesAnnotatedWith(Api.class)); > return classes; > } > > private Swagger configSwagger(ServletContext contexto) { > Swagger swagger = new Swagger().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(ServletContextEvent sce) { > 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] <javascript:>. > 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.
