My suggestions are as follows
1. Encourage providers to specify required & defalutValue explicitly. 
   a. when required=true and defaultValue is given, if consumers do not give a 
value, use default value;
   b. when required=true and defaultValue is not given, if consumers do not 
give a value, throw a BadParam exception.
   c. when required=false and defaultValue is given, if consumers do not give a 
value, use default value; 
   d. when required=false and defaultValue is not given, give default values to 
parameter according to java conventions. e.g. integer is 0 and object is null.
   e. when generating swagger, generate defalutValue only when explicitly 
specified.


2. As I know from PR[2], JAX-RS do not have annotations to specify required, 
required is always false. This is different from Spring MVC, which required 
defaults to true.
   a. JAX-RS defaults: required=false and defalutValue not specified
   b. Spring MVC default: required=true adefalutValue not specifiednd 




This suggestion seems equals to your Solution 1, the difference seems you take 
JAX-RS defaults required=true


[1] 
https://docs.jboss.org/resteasy/2.0.0.GA/javadocs/javax/ws/rs/DefaultValue.html
[2] https://issues.apache.org/jira/browse/SCB-709 
[3] Spring MVC: RequestParam annotation: boolean required() default true;


------------------ Original ------------------
From:  "mahesh somalaraju"<[email protected]>;
Date:  Thu, Jul 26, 2018 03:23 PM
To:  "[email protected]"<[email protected]>;
Cc:  "Vinay Murudi"<[email protected]>; "Sukesh A C"<[email protected]>; 
"Mohammad Asif Siddiqui"<[email protected]>; 
Subject:  [DISCUSS] Swagger parameter default values while generating theschema 
file



Hi All,

Currently we are handling the issue related to swagger parameter default values 
while generating the swagger content.

Default value annotation(@DefaultValue) we can provide for PathParam, 
QueryParam, MatrixParam, CookieParam, FormParam and HeaderParam.

The query is when to consider default value for swagger parameter.

Solution:1 [parameter value required case]
  While generating the swagger content:

1)      consider default value(@DefaultValue) if and only the parameter 
configured required is false(required=false).

2)      If default value(@DefaultValue)  is not available then consider JAVA 
primitive default values only when the parameter configured required is 
false(required=false).

The default values as follows:

Object types  --> null

collection for List, Set or SortedSet --> Empty list

primitive types:

int, long --> 0

                float, double --> 0.0

                boolean  --> false     etc..

3)      When the user not provided value in request(meta-data) and the 
parameter is configured with required is true(required=true) then throw 
exception by saying that "Invalid parameter".

Solution:2 [General case]
  While generating the swagger content:

1)      consider default value(@DefaultValue) without checking whether it is 
required or not(required=true or required=false)

2)      If default value(@DefaultValue)  is not available then consider JAVA 
primitive default values without checking whether it is required or 
not(required=true or required=false)

The default values as follows:

Object types  --> null

collection for List, Set or SortedSet --> Empty list

primitive types:

int, long --> 0

                float, double --> 0.0

                boolean  --> false     etc..

3)      When the user not provided value in request(meta-data) , first it will 
check annotated default value field and then it will check JAVA primitive 
default values.

Always some default values will be there for parameters and If user not given 
any values in request then it will consider the default values presented in 
schema content.


Any thoughts on this?
Please suggest which solution is best for handling the swagger parameter 
default values. Thank you in advance !


Thanks & Regards
Mahesh Raju Somalaraju
Github(id: maheshrajus)

Reply via email to