Skip to content

Commit

Permalink
JAX-RS processor should extract FormParam fields from @BeanParam object
Browse files Browse the repository at this point in the history
  • Loading branch information
aharin committed Oct 18, 2018
1 parent e92d1b9 commit c815d23
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,8 @@ public ResolvedParameter extractParameters(List<Annotation> annotations,
return new ResolvedParameter();
}

List<Parameter> parameters = new ArrayList<>();

Parameter parameter = null;
ResolvedParameter extractParametersResult = new ResolvedParameter();
for (Annotation annotation : annotations) {
if (annotation instanceof QueryParam) {
QueryParam param = (QueryParam) annotation;
Expand Down Expand Up @@ -89,20 +88,24 @@ public ResolvedParameter extractParameters(List<Annotation> annotations,
parameter = pp;
} else if (annotation instanceof io.swagger.v3.oas.annotations.Parameter) {
if (((io.swagger.v3.oas.annotations.Parameter) annotation).hidden()) {
extractParametersResult.parameters = parameters;
return extractParametersResult;
return new ResolvedParameter();
}
if (parameter == null) {
Parameter pp = new Parameter();
parameter = pp;
parameter = new Parameter();
}
} else {
if (handleAdditionalAnnotation(parameters, annotation, type, typesToSkip, classConsumes, methodConsumes, components, includeRequestBody, jsonViewAnnotation)) {
List<Parameter> formParameters = new ArrayList<>();
List<Parameter> parameters = new ArrayList<>();
if (handleAdditionalAnnotation(parameters, formParameters, annotation, type, typesToSkip, classConsumes, methodConsumes, components, includeRequestBody, jsonViewAnnotation)) {
ResolvedParameter extractParametersResult = new ResolvedParameter();
extractParametersResult.parameters.addAll(parameters);
extractParametersResult.formParameters.addAll(formParameters);
return extractParametersResult;
}
}
}
List<Parameter> parameters = new ArrayList<>();
ResolvedParameter extractParametersResult = new ResolvedParameter();

if (parameter != null && StringUtils.isNotBlank(parameter.getIn())) {
parameters.add(parameter);
Expand All @@ -119,7 +122,7 @@ public ResolvedParameter extractParameters(List<Annotation> annotations,
extractParametersResult.parameters.add(unknownParameter);
} else if ("form".equals(unknownParameter.getIn())) {
unknownParameter.setIn(null);
extractParametersResult.formParameter = unknownParameter;
extractParametersResult.formParameters.add(unknownParameter);
} else { // return as request body
extractParametersResult.requestBody = unknownParameter;
}
Expand Down Expand Up @@ -150,7 +153,7 @@ public ResolvedParameter extractParameters(List<Annotation> annotations,
* @param typesToSkip
*/

private boolean handleAdditionalAnnotation(List<Parameter> parameters, Annotation annotation,
private boolean handleAdditionalAnnotation(List<Parameter> parameters, List<Parameter> formParameters, Annotation annotation,
final Type type, Set<Type> typesToSkip, javax.ws.rs.Consumes classConsumes,
javax.ws.rs.Consumes methodConsumes, Components components, boolean includeRequestBody, JsonView jsonViewAnnotation) {
boolean processed = false;
Expand Down Expand Up @@ -212,19 +215,21 @@ private boolean handleAdditionalAnnotation(List<Parameter> parameters, Annotatio
}

// Re-process all Bean fields and let the default swagger-jaxrs/swagger-jersey-jaxrs processors do their thing
List<Parameter> extracted =
extensions.next().extractParameters(
paramAnnotations,
paramType,
typesToSkip,
components,
classConsumes,
methodConsumes,
includeRequestBody,
jsonViewAnnotation,
extensions).parameters;

for (Parameter p : extracted) {
ResolvedParameter resolvedParameter = extensions.next().extractParameters(
paramAnnotations,
paramType,
typesToSkip,
components,
classConsumes,
methodConsumes,
includeRequestBody,
jsonViewAnnotation,
extensions);

List<Parameter> extractedParameters =
resolvedParameter.parameters;

for (Parameter p : extractedParameters) {
Parameter processedParam = ParameterProcessor.applyAnnotations(
p,
paramType,
Expand All @@ -238,6 +243,23 @@ private boolean handleAdditionalAnnotation(List<Parameter> parameters, Annotatio
}
}

List<Parameter> extractedFormParameters =
resolvedParameter.formParameters;

for (Parameter p : extractedFormParameters) {
Parameter processedParam = ParameterProcessor.applyAnnotations(
p,
paramType,
paramAnnotations,
components,
classConsumes == null ? new String[0] : classConsumes.value(),
methodConsumes == null ? new String[0] : methodConsumes.value(),
jsonViewAnnotation);
if (processedParam != null) {
formParameters.add(processedParam);
}
}

processed = true;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -461,9 +461,9 @@ public OpenAPI read(Class<?> cls,
}
}
ResolvedParameter resolvedParameter = getParameters(paramType, Arrays.asList(paramAnnotations[i]), operation, classConsumes, methodConsumes, jsonViewAnnotation);
for (Parameter p : resolvedParameter.parameters) {
operationParameters.add(p);
}
operationParameters.addAll(resolvedParameter.parameters);
// collect params to use together as request Body
formParameters.addAll(resolvedParameter.formParameters);
if (resolvedParameter.requestBody != null) {
processRequestBody(
resolvedParameter.requestBody,
Expand All @@ -474,9 +474,6 @@ public OpenAPI read(Class<?> cls,
paramAnnotations[i],
type,
jsonViewAnnotation);
} else if (resolvedParameter.formParameter != null) {
// collect params to use together as request Body
formParameters.add(resolvedParameter.formParameter);
}
}
} else {
Expand All @@ -493,9 +490,9 @@ public OpenAPI read(Class<?> cls,
}
}
ResolvedParameter resolvedParameter = getParameters(paramType, Arrays.asList(paramAnnotations[i]), operation, classConsumes, methodConsumes, jsonViewAnnotation);
for (Parameter p : resolvedParameter.parameters) {
operationParameters.add(p);
}
operationParameters.addAll(resolvedParameter.parameters);
// collect params to use together as request Body
formParameters.addAll(resolvedParameter.formParameters);
if (resolvedParameter.requestBody != null) {
processRequestBody(
resolvedParameter.requestBody,
Expand All @@ -506,9 +503,6 @@ public OpenAPI read(Class<?> cls,
paramAnnotations[i],
type,
jsonViewAnnotation);
} else if (resolvedParameter.formParameter != null) {
// collect params to use together as request Body
formParameters.add(resolvedParameter.formParameter);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@
public class ResolvedParameter {
public List<Parameter> parameters = new ArrayList<>();
public Parameter requestBody;
public Parameter formParameter;
public List<Parameter> formParameters = new ArrayList<>();
}

0 comments on commit c815d23

Please sign in to comment.