Skip to content

Commit f6051e3

Browse files
authored
Merge pull request #2068 from pjfanning/request-class
support @ApiImplicitParam dataTypeClass
2 parents 5ba1f72 + c251719 commit f6051e3

File tree

4 files changed

+114
-3
lines changed

4 files changed

+114
-3
lines changed

modules/swagger-annotations/src/main/java/io/swagger/annotations/ApiImplicitParam.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,18 @@
103103
*/
104104
String dataType() default "";
105105

106+
/**
107+
* The class of the parameter.
108+
* <p>
109+
* Overrides {@code dataType} if provided.
110+
*/
111+
Class<?> dataTypeClass() default Void.class;
112+
106113
/**
107114
* The parameter type of the parameter.
108115
* <p>
109-
* Valid values are {@code path}, {@code query}, {@code body}, {@code header} or {@code form}.
116+
* Valid values are {@code path}, {@code query}, {@code body},
117+
* {@code header} or {@code form}.
110118
*/
111119
String paramType() default "";
112120

modules/swagger-jaxrs/src/main/java/io/swagger/jaxrs/Reader.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,8 @@ protected Parameter readImplicitParam(ApiImplicitParam param) {
472472
LOGGER.warn("Unknown implicit parameter type: [{}]", param.paramType());
473473
return null;
474474
}
475-
final Type type = ReflectionUtils.typeFromString(param.dataType());
475+
final Type type = param.dataTypeClass() == Void.class ? ReflectionUtils.typeFromString(param.dataType())
476+
: param.dataTypeClass();
476477
return ParameterProcessor.applyAnnotations(swagger, p, (type == null) ? String.class : type,
477478
Arrays.<Annotation>asList(param));
478479
}
@@ -1002,7 +1003,7 @@ private void addResponse(Operation operation, ApiResponse apiResponse) {
10021003
Map<String, Property> responseHeaders = parseResponseHeaders(apiResponse.responseHeaders());
10031004

10041005
Response response = new Response()
1005-
.description(apiResponse.message()).headers(responseHeaders);
1006+
.description(apiResponse.message()).headers(responseHeaders);
10061007

10071008
if (apiResponse.code() == 0) {
10081009
operation.defaultResponse(response);

modules/swagger-jaxrs/src/test/java/io/swagger/SimpleReaderTest.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import io.swagger.models.properties.RefProperty;
2929
import io.swagger.models.properties.StringProperty;
3030
import io.swagger.resources.ClassWithExamplePost;
31+
import io.swagger.resources.ClassWithExamplePostClass;
3132
import io.swagger.resources.HiddenResource;
3233
import io.swagger.resources.Issue1979Resource;
3334
import io.swagger.resources.NicknamedOperation;
@@ -633,6 +634,48 @@ public void scanClassWithImplicitExampleQuery() {
633634
assertEquals("77", value);
634635
}
635636

637+
@Test(description = "scan a resource with operation post example (dataTypeClass)")
638+
public void scanClassWithExamplePostClass() {
639+
Swagger swagger = getSwagger(ClassWithExamplePostClass.class);
640+
Parameter param = swagger.getPaths().get("/external/info").getPost().getParameters().get(0);
641+
BodyParameter bp = (BodyParameter) param;
642+
assertNotNull(bp.getExamples());
643+
assertTrue(bp.getExamples().size() == 1);
644+
String value = bp.getExamples().get("application/json");
645+
assertEquals("[\"a\",\"b\"]", value);
646+
}
647+
648+
@Test(description = "scan a resource with operation implicit post example (dataTypeClass)")
649+
public void scanClassWithImplicitExamplePostClass() {
650+
Swagger swagger = getSwagger(ClassWithExamplePostClass.class);
651+
Parameter param = swagger.getPaths().get("/external/info2").getPost().getParameters().get(0);
652+
BodyParameter bp = (BodyParameter) param;
653+
assertNotNull(bp.getExamples());
654+
assertTrue(bp.getExamples().size() == 1);
655+
String value = bp.getExamples().get("application/json");
656+
assertEquals("[\"a\",\"b\"]", value);
657+
}
658+
659+
@Test(description = "scan a resource with query param example (dataTypeClass)")
660+
public void scanClassWithExampleClassQuery() {
661+
Swagger swagger = getSwagger(ClassWithExamplePostClass.class);
662+
Parameter param = swagger.getPaths().get("/external/info").getGet().getParameters().get(0);
663+
QueryParameter bp = (QueryParameter) param;
664+
assertNotNull(bp.getExample());
665+
Object value = bp.getExample();
666+
assertEquals("a,b,c", value);
667+
}
668+
669+
@Test(description = "scan a resource with implicit operation query example (dataTypeClass)")
670+
public void scanClassWithImplicitExampleClassQuery() {
671+
Swagger swagger = getSwagger(ClassWithExamplePostClass.class);
672+
Parameter param = swagger.getPaths().get("/external/info2").getGet().getParameters().get(0);
673+
QueryParameter bp = (QueryParameter) param;
674+
assertNotNull(bp.getExample());
675+
Object value = bp.getExample();
676+
assertEquals("77", value);
677+
}
678+
636679
@Test(description = "scan a resource with read-only and empty value parameters")
637680
public void scanClassWithReadOnlyAndEmptyValueParams() {
638681
Swagger swagger = getSwagger(Issue1979Resource.class);
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package io.swagger.resources;
2+
3+
import io.swagger.annotations.*;
4+
5+
import javax.ws.rs.GET;
6+
import javax.ws.rs.POST;
7+
import javax.ws.rs.Path;
8+
import javax.ws.rs.QueryParam;
9+
import java.util.ArrayList;
10+
11+
@Api("/external/info/")
12+
@Path("/")
13+
public class ClassWithExamplePostClass {
14+
@ApiOperation(value = "test")
15+
@POST
16+
@Path("external/info")
17+
public void postTest(@ApiParam(value = "test",
18+
examples = @Example(value = {
19+
@ExampleProperty(mediaType="application/json", value="[\"a\",\"b\"]")
20+
})) ArrayList<String> tenantId) {
21+
return;
22+
}
23+
24+
@ApiOperation(value = "test")
25+
@POST
26+
@Path("external/info2")
27+
@ApiImplicitParams({
28+
@ApiImplicitParam(
29+
paramType = "body",
30+
name = "myPody",
31+
dataTypeClass = String[].class,
32+
examples = @Example(value = {
33+
@ExampleProperty(mediaType="application/json", value="[\"a\",\"b\"]")}))
34+
})
35+
public void implicitPostTest() {
36+
return;
37+
}
38+
39+
@ApiOperation(value = "test")
40+
@GET
41+
@Path("external/info")
42+
public void queryExample(@ApiParam(value = "test",
43+
example = "a,b,c") @QueryParam("tenantId") ArrayList<String> tenantId) {
44+
return;
45+
}
46+
47+
@ApiOperation(value = "test")
48+
@GET
49+
@Path("external/info2")
50+
@ApiImplicitParams({
51+
@ApiImplicitParam(
52+
paramType = "query",
53+
name = "myId",
54+
dataTypeClass = Long.class,
55+
example = "77") })
56+
public void implicitQueryExample() {
57+
return;
58+
}
59+
}

0 commit comments

Comments
 (0)