Skip to content

Commit b212668

Browse files
committed
allow siblings in request body schemas OAS 3.1 resolving
1 parent 800fb35 commit b212668

File tree

6 files changed

+100
-7
lines changed

6 files changed

+100
-7
lines changed

modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -704,7 +704,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context
704704
addRequiredItem(model, propName);
705705
}
706706
}
707-
if (property.get$ref() == null) {
707+
if (property.get$ref() == null || openapi31) {
708708
if (accessMode != null) {
709709
switch (accessMode) {
710710
case AUTO:

modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -753,8 +753,8 @@ public static Optional<Schema> getSchemaFromAnnotation(
753753
schemaObject.setReadOnly(true);
754754
schemaObject.setWriteOnly(null);
755755
} else if (schema.accessMode().equals(io.swagger.v3.oas.annotations.media.Schema.AccessMode.WRITE_ONLY)) {
756-
schemaObject.setReadOnly(false);
757-
schemaObject.setWriteOnly(null);
756+
schemaObject.setReadOnly(null);
757+
schemaObject.setWriteOnly(true);
758758
} else if (schema.accessMode().equals(io.swagger.v3.oas.annotations.media.Schema.AccessMode.READ_WRITE)) {
759759
schemaObject.setReadOnly(null);
760760
schemaObject.setWriteOnly(null);

modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -759,7 +759,7 @@ protected void processRequestBody(Parameter requestBodyParameter, Operation oper
759759

760760
io.swagger.v3.oas.annotations.parameters.RequestBody requestBodyAnnotation = getRequestBody(Arrays.asList(paramAnnotations));
761761
if (requestBodyAnnotation != null) {
762-
Optional<RequestBody> optionalRequestBody = OperationParser.getRequestBody(requestBodyAnnotation, classConsumes, methodConsumes, components, jsonViewAnnotation);
762+
Optional<RequestBody> optionalRequestBody = OperationParser.getRequestBody(requestBodyAnnotation, classConsumes, methodConsumes, components, jsonViewAnnotation, config.isOpenAPI31());
763763
if (optionalRequestBody.isPresent()) {
764764
RequestBody requestBody = optionalRequestBody.get();
765765
if (StringUtils.isBlank(requestBody.get$ref()) &&
@@ -1047,7 +1047,7 @@ protected Operation parseMethod(
10471047

10481048
// RequestBody in Method
10491049
if (apiRequestBody != null && operation.getRequestBody() == null){
1050-
OperationParser.getRequestBody(apiRequestBody, classConsumes, methodConsumes, components, jsonViewAnnotation).ifPresent(
1050+
OperationParser.getRequestBody(apiRequestBody, classConsumes, methodConsumes, components, jsonViewAnnotation, config.isOpenAPI31()).ifPresent(
10511051
operation::setRequestBody);
10521052
}
10531053

@@ -1393,7 +1393,7 @@ protected void setOperationObjectFromApiOperationAnnotation(
13931393

13941394
// RequestBody in Operation
13951395
if (apiOperation.requestBody() != null && operation.getRequestBody() == null) {
1396-
OperationParser.getRequestBody(apiOperation.requestBody(), classConsumes, methodConsumes, components, jsonViewAnnotation).ifPresent(
1396+
OperationParser.getRequestBody(apiOperation.requestBody(), classConsumes, methodConsumes, components, jsonViewAnnotation, config.isOpenAPI31()).ifPresent(
13971397
operation::setRequestBody);
13981398
}
13991399

modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import io.swagger.v3.jaxrs2.resources.ResponseReturnTypeResource;
1919
import io.swagger.v3.jaxrs2.resources.SchemaPropertiesResource;
2020
import io.swagger.v3.jaxrs2.resources.SiblingsResource;
21+
import io.swagger.v3.jaxrs2.resources.SiblingsResourceRequestBody;
2122
import io.swagger.v3.jaxrs2.resources.SiblingsResourceSimple;
2223
import io.swagger.v3.jaxrs2.resources.SingleExampleResource;
2324
import io.swagger.v3.jaxrs2.resources.BasicFieldsResource;
@@ -3508,4 +3509,49 @@ public void testSiblingsOnResource() {
35083509
" description: Pet\n";
35093510
SerializationMatchers.assertEqualsToYaml31(openAPI, yaml);
35103511
}
3512+
3513+
@Test
3514+
public void testSiblingsOnResourceRequestBody() {
3515+
Reader reader = new Reader(new SwaggerConfiguration().openAPI(new OpenAPI()).openAPI31(true));
3516+
3517+
OpenAPI openAPI = reader.read(SiblingsResourceRequestBody.class);
3518+
String yaml = "openapi: 3.1.0\n" +
3519+
"paths:\n" +
3520+
" /test/bodyimpl:\n" +
3521+
" get:\n" +
3522+
" operationId: getBodyImpl\n" +
3523+
" requestBody:\n" +
3524+
" description: aaa\n" +
3525+
" content:\n" +
3526+
" application/json:\n" +
3527+
" schema:\n" +
3528+
" $ref: '#/components/schemas/PetSimple'\n" +
3529+
" description: resource pet\n" +
3530+
" writeOnly: true\n" +
3531+
" responses:\n" +
3532+
" default:\n" +
3533+
" description: default response\n" +
3534+
" content:\n" +
3535+
" '*/*': {}\n" +
3536+
" /test/bodyimplparam:\n" +
3537+
" get:\n" +
3538+
" operationId: getBodyImplParam\n" +
3539+
" requestBody:\n" +
3540+
" content:\n" +
3541+
" '*/*':\n" +
3542+
" schema:\n" +
3543+
" $ref: '#/components/schemas/PetSimple'\n" +
3544+
" description: resource pet\n" +
3545+
" writeOnly: true\n" +
3546+
" responses:\n" +
3547+
" default:\n" +
3548+
" description: default response\n" +
3549+
" content:\n" +
3550+
" '*/*': {}\n" +
3551+
"components:\n" +
3552+
" schemas:\n" +
3553+
" PetSimple:\n" +
3554+
" description: Pet\n";
3555+
SerializationMatchers.assertEqualsToYaml31(openAPI, yaml);
3556+
}
35113557
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package io.swagger.v3.jaxrs2.resources;
2+
3+
import io.swagger.v3.jaxrs2.resources.siblings.PetSimple;
4+
import io.swagger.v3.oas.annotations.Operation;
5+
import io.swagger.v3.oas.annotations.media.Content;
6+
import io.swagger.v3.oas.annotations.media.Schema;
7+
import io.swagger.v3.oas.annotations.parameters.RequestBody;
8+
import io.swagger.v3.oas.annotations.responses.ApiResponse;
9+
10+
import javax.ws.rs.GET;
11+
import javax.ws.rs.Path;
12+
import javax.ws.rs.core.Response;
13+
14+
@Path("/test")
15+
public class SiblingsResourceRequestBody {
16+
@Path("/bodyimpl")
17+
@GET
18+
@Operation(
19+
requestBody =
20+
@RequestBody(
21+
description = "aaa",
22+
content = {
23+
@Content(
24+
mediaType = "application/json",
25+
schema = @Schema(
26+
description = "resource pet",
27+
implementation = PetSimple.class,
28+
accessMode = Schema.AccessMode.WRITE_ONLY))
29+
}))
30+
public Response getBodyImpl(Object body) {
31+
return null;
32+
}
33+
34+
@Path("/bodyimplparam")
35+
@GET
36+
public Response getBodyImplParam(@RequestBody(
37+
content = {
38+
@Content(
39+
mediaType = "*/*",
40+
schema = @Schema(
41+
description = "resource pet",
42+
implementation = PetSimple.class,
43+
accessMode = Schema.AccessMode.WRITE_ONLY))
44+
}) Object body) {
45+
return null;
46+
}
47+
}

modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceSimple.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.swagger.v3.jaxrs2.resources;
22

3-
import io.swagger.v3.jaxrs2.resources.siblings.Pet;
43
import io.swagger.v3.jaxrs2.resources.siblings.PetSimple;
54
import io.swagger.v3.oas.annotations.Operation;
65
import io.swagger.v3.oas.annotations.media.Content;
@@ -48,4 +47,5 @@ public PetSimple getCart() {
4847
public PetSimple getCartImpl() {
4948
return null;
5049
}
50+
5151
}

0 commit comments

Comments
 (0)