Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e34a133

Browse files
author
Kevin Conaway
committed
springfox#778 Take @RequestParam(defaultValue) in to account when marking parameter required.
1 parent ec1aeab commit e34a133

2 files changed

Lines changed: 32 additions & 6 deletions

File tree

springfox-spring-web/src/main/java/springfox/documentation/spring/web/readers/parameter/ParameterRequiredReader.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.springframework.web.bind.annotation.RequestBody;
2828
import org.springframework.web.bind.annotation.RequestHeader;
2929
import org.springframework.web.bind.annotation.RequestParam;
30+
import org.springframework.web.bind.annotation.ValueConstants;
3031
import springfox.documentation.spi.DocumentationType;
3132
import springfox.documentation.spi.service.ParameterBuilderPlugin;
3233
import springfox.documentation.spi.service.contexts.ParameterContext;
@@ -59,7 +60,7 @@ private Boolean getAnnotatedRequired(MethodParameter methodParameter) {
5960

6061
for (Annotation annotation : methodAnnotations) {
6162
if (annotation instanceof RequestParam) {
62-
requiredSet.add(!optional && ((RequestParam) annotation).required());
63+
requiredSet.add(!optional && isRequired((RequestParam) annotation));
6364
} else if (annotation instanceof RequestHeader) {
6465
requiredSet.add(!optional && ((RequestHeader) annotation).required());
6566
} else if (annotation instanceof PathVariable) {
@@ -74,4 +75,14 @@ private Boolean getAnnotatedRequired(MethodParameter methodParameter) {
7475
private boolean isOptional(MethodParameter methodParameter) {
7576
return methodParameter.getParameterType().getName().equals("java.util.Optional");
7677
}
78+
79+
private boolean isRequired(RequestParam annotation) {
80+
String defaultValue = annotation.defaultValue();
81+
boolean missingDefaultValue = ValueConstants.DEFAULT_NONE.equals(defaultValue) ||
82+
(defaultValue == null || defaultValue.length() == 0);
83+
if (annotation.required()) {
84+
return missingDefaultValue;
85+
}
86+
return false;
87+
}
7788
}

springfox-spring-web/src/test/groovy/springfox/documentation/spring/web/readers/parameter/ParameterRequiredReaderSpec.groovy

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import org.springframework.web.bind.annotation.PathVariable
2525
import org.springframework.web.bind.annotation.RequestBody
2626
import org.springframework.web.bind.annotation.RequestHeader
2727
import org.springframework.web.bind.annotation.RequestParam
28+
import org.springframework.web.bind.annotation.ValueConstants
2829
import springfox.documentation.builders.ParameterBuilder
2930
import springfox.documentation.spi.DocumentationType
3031
import springfox.documentation.spi.schema.GenericTypeNamingStrategy
@@ -62,13 +63,27 @@ class ParameterRequiredReaderSpec extends DocumentationContextSpec {
6263
[[required: { -> false }] as RequestHeader] | false
6364
[[required: { -> true }] as ApiParam] | false
6465
[[required: { -> false }] as ApiParam] | false
65-
[[required: { -> true }] as RequestParam] | true
66-
[[required: { -> false }] as RequestParam] | false
67-
[[required: { -> true }] as ApiParam, [required: { -> false }] as RequestParam] | false
68-
[[required: { -> false }] as ApiParam, [required: { -> true }] as RequestParam] | true
66+
[[required: { -> true },
67+
defaultValue: { -> ValueConstants.DEFAULT_NONE}] as RequestParam] | true
68+
[[required: { -> true },
69+
defaultValue: { -> ""}] as RequestParam] | true
70+
[[required: { -> true },
71+
defaultValue: { -> null}] as RequestParam] | true
72+
[[required: { -> true },
73+
defaultValue: { -> "default value"}] as RequestParam] | false
74+
[[required: { -> false },
75+
defaultValue: { -> ValueConstants.DEFAULT_NONE}] as RequestParam] | false
76+
[[required: { -> true }] as ApiParam,
77+
[required: { -> false },
78+
defaultValue: { -> ValueConstants.DEFAULT_NONE}] as RequestParam] | false
79+
[[required: { -> false }] as ApiParam,
80+
[required: { -> true },
81+
defaultValue: { -> ValueConstants.DEFAULT_NONE}] as RequestParam] | true
6982
[[required: { -> false }] as RequestBody] | false
7083
[[required: { -> true }] as RequestBody] | true
71-
[[required: { -> false }] as ApiParam, [required: { -> true }] as RequestParam] | true
84+
[[required: { -> false }] as ApiParam,
85+
[required: { -> true },
86+
defaultValue: { -> ValueConstants.DEFAULT_NONE}] as RequestParam] | true
7287
[] | false
7388
[null] | false
7489
}

0 commit comments

Comments
 (0)