You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@servicecomb.apache.org by mahesh somalaraju <ma...@huawei.com> on 2018/07/26 07:23:05 UTC

[DISCUSS] Swagger parameter default values while generating the schema 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)


回复: [DISCUSS] Swagger parameter default values whilegeneratingtheschema file

Posted by bismy <bi...@qq.com>.
Well, this is fine and I think we have the same conclusion. 


We implement this behavior according to mail I send before.


> >    a. JAX-RS defaults: required=false and defalutValue not specified
> >    b. Spring MVC default: required=true adefalutValue not specifiednd




@mahesh  How do you think?


------------------ 原始邮件 ------------------
发件人: "zzzwjm"<zz...@gmail.com>;
发送时间: 2018年7月27日(星期五) 中午11:36
收件人: "dev"<de...@servicecomb.apache.org>;

主题: Re: [DISCUSS] Swagger parameter default values whilegeneratingtheschema file



if unify to jaxrs behavior, i feel that's very good.

2018-07-27 11:17 GMT+08:00 wjm wjm <zz...@gmail.com>:

> in jaxrs mode, required default to false, if primitive type not annotated
> by @DefaultValue, should generated defaultValue to swagger
> in springmvc mode, not support standard jaxrs behavior, so we no need to
> process it.  (if not consider compatible to standard springmvc, i feel that
> standard jaxrs behavior is better)
>
> 2018-07-27 10:40 GMT+08:00 bismy <bi...@qq.com>:
>
>> @zzzwjm
>>
>>
>> For this:
>> ``quot
>>    for primitive type, even there is no @DefaultValue annotation, should
>> have it's default value
>> ``
>>
>>
>> Do we need to consider required = true? Why we should give default value
>> to primitive types even when required = true?
>>
>>
>> As I know, JAX-RS do not have an annotations to specify required
>> property, and it's implementation some like required=false, and give
>> primitive types the java default value.
>> And Spring MVC(spring boot implementation) defaults to required=true, if
>> primitive types not given, will throw Bad Param exception.
>> ------------------ 原始邮件 ------------------
>> 发件人: "zzzwjm"<zz...@gmail.com>;
>> 发送时间: 2018年7月26日(星期四) 晚上10:00
>> 收件人: "dev"<de...@servicecomb.apache.org>;
>>
>> 主题: Re: [DISCUSS] Swagger parameter default values while
>> generatingtheschema file
>>
>>
>>
>> " e. when generating swagger, generate defalutValue only when explicitly
>> specified."
>>
>> add another point:
>> for primitive type, even there is no @DefaultValue annotation, should have
>> it's default value
>>
>> 2018-07-26 19:42 GMT+08:00 bismy <bi...@qq.com>:
>>
>> > 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"<ma...@huawei.com>;
>> > Date:  Thu, Jul 26, 2018 03:23 PM
>> > To:  "dev@servicecomb.apache.org"<de...@servicecomb.apache.org>;
>> > Cc:  "Vinay Murudi"<vi...@huawei.com>; "Sukesh A C"<
>> sukeshac@huawei.com>;
>> > "Mohammad Asif Siddiqui"<mo...@huawei.com>;
>> > 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)
>> >
>>
>
>

Re: [DISCUSS] Swagger parameter default values while generatingtheschema file

Posted by wjm wjm <zz...@gmail.com>.
if unify to jaxrs behavior, i feel that's very good.

2018-07-27 11:17 GMT+08:00 wjm wjm <zz...@gmail.com>:

> in jaxrs mode, required default to false, if primitive type not annotated
> by @DefaultValue, should generated defaultValue to swagger
> in springmvc mode, not support standard jaxrs behavior, so we no need to
> process it.  (if not consider compatible to standard springmvc, i feel that
> standard jaxrs behavior is better)
>
> 2018-07-27 10:40 GMT+08:00 bismy <bi...@qq.com>:
>
>> @zzzwjm
>>
>>
>> For this:
>> ``quot
>>    for primitive type, even there is no @DefaultValue annotation, should
>> have it's default value
>> ``
>>
>>
>> Do we need to consider required = true? Why we should give default value
>> to primitive types even when required = true?
>>
>>
>> As I know, JAX-RS do not have an annotations to specify required
>> property, and it's implementation some like required=false, and give
>> primitive types the java default value.
>> And Spring MVC(spring boot implementation) defaults to required=true, if
>> primitive types not given, will throw Bad Param exception.
>> ------------------ 原始邮件 ------------------
>> 发件人: "zzzwjm"<zz...@gmail.com>;
>> 发送时间: 2018年7月26日(星期四) 晚上10:00
>> 收件人: "dev"<de...@servicecomb.apache.org>;
>>
>> 主题: Re: [DISCUSS] Swagger parameter default values while
>> generatingtheschema file
>>
>>
>>
>> " e. when generating swagger, generate defalutValue only when explicitly
>> specified."
>>
>> add another point:
>> for primitive type, even there is no @DefaultValue annotation, should have
>> it's default value
>>
>> 2018-07-26 19:42 GMT+08:00 bismy <bi...@qq.com>:
>>
>> > 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"<ma...@huawei.com>;
>> > Date:  Thu, Jul 26, 2018 03:23 PM
>> > To:  "dev@servicecomb.apache.org"<de...@servicecomb.apache.org>;
>> > Cc:  "Vinay Murudi"<vi...@huawei.com>; "Sukesh A C"<
>> sukeshac@huawei.com>;
>> > "Mohammad Asif Siddiqui"<mo...@huawei.com>;
>> > 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)
>> >
>>
>
>

Re: [DISCUSS] Swagger parameter default values while generatingtheschema file

Posted by wjm wjm <zz...@gmail.com>.
in jaxrs mode, required default to false, if primitive type not annotated
by @DefaultValue, should generated defaultValue to swagger
in springmvc mode, not support standard jaxrs behavior, so we no need to
process it.  (if not consider compatible to standard springmvc, i feel that
standard jaxrs behavior is better)

2018-07-27 10:40 GMT+08:00 bismy <bi...@qq.com>:

> @zzzwjm
>
>
> For this:
> ``quot
>    for primitive type, even there is no @DefaultValue annotation, should
> have it's default value
> ``
>
>
> Do we need to consider required = true? Why we should give default value
> to primitive types even when required = true?
>
>
> As I know, JAX-RS do not have an annotations to specify required property,
> and it's implementation some like required=false, and give primitive types
> the java default value.
> And Spring MVC(spring boot implementation) defaults to required=true, if
> primitive types not given, will throw Bad Param exception.
> ------------------ 原始邮件 ------------------
> 发件人: "zzzwjm"<zz...@gmail.com>;
> 发送时间: 2018年7月26日(星期四) 晚上10:00
> 收件人: "dev"<de...@servicecomb.apache.org>;
>
> 主题: Re: [DISCUSS] Swagger parameter default values while
> generatingtheschema file
>
>
>
> " e. when generating swagger, generate defalutValue only when explicitly
> specified."
>
> add another point:
> for primitive type, even there is no @DefaultValue annotation, should have
> it's default value
>
> 2018-07-26 19:42 GMT+08:00 bismy <bi...@qq.com>:
>
> > 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"<ma...@huawei.com>;
> > Date:  Thu, Jul 26, 2018 03:23 PM
> > To:  "dev@servicecomb.apache.org"<de...@servicecomb.apache.org>;
> > Cc:  "Vinay Murudi"<vi...@huawei.com>; "Sukesh A C"<sukeshac@huawei.com
> >;
> > "Mohammad Asif Siddiqui"<mo...@huawei.com>;
> > 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)
> >
>

回复: [DISCUSS] Swagger parameter default values while generatingtheschema file

Posted by bismy <bi...@qq.com>.
@zzzwjm


For this:
``quot
   for primitive type, even there is no @DefaultValue annotation, should have it's default value
``


Do we need to consider required = true? Why we should give default value to primitive types even when required = true?


As I know, JAX-RS do not have an annotations to specify required property, and it's implementation some like required=false, and give primitive types the java default value.
And Spring MVC(spring boot implementation) defaults to required=true, if primitive types not given, will throw Bad Param exception.
------------------ 原始邮件 ------------------
发件人: "zzzwjm"<zz...@gmail.com>;
发送时间: 2018年7月26日(星期四) 晚上10:00
收件人: "dev"<de...@servicecomb.apache.org>;

主题: Re: [DISCUSS] Swagger parameter default values while generatingtheschema file



" e. when generating swagger, generate defalutValue only when explicitly
specified."

add another point:
for primitive type, even there is no @DefaultValue annotation, should have
it's default value

2018-07-26 19:42 GMT+08:00 bismy <bi...@qq.com>:

> 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"<ma...@huawei.com>;
> Date:  Thu, Jul 26, 2018 03:23 PM
> To:  "dev@servicecomb.apache.org"<de...@servicecomb.apache.org>;
> Cc:  "Vinay Murudi"<vi...@huawei.com>; "Sukesh A C"<su...@huawei.com>;
> "Mohammad Asif Siddiqui"<mo...@huawei.com>;
> 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)
>

Re: [DISCUSS] Swagger parameter default values while generating theschema file

Posted by wjm wjm <zz...@gmail.com>.
" e. when generating swagger, generate defalutValue only when explicitly
specified."

add another point:
for primitive type, even there is no @DefaultValue annotation, should have
it's default value

2018-07-26 19:42 GMT+08:00 bismy <bi...@qq.com>:

> 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"<ma...@huawei.com>;
> Date:  Thu, Jul 26, 2018 03:23 PM
> To:  "dev@servicecomb.apache.org"<de...@servicecomb.apache.org>;
> Cc:  "Vinay Murudi"<vi...@huawei.com>; "Sukesh A C"<su...@huawei.com>;
> "Mohammad Asif Siddiqui"<mo...@huawei.com>;
> 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)
>

Re: [DISCUSS] Swagger parameter default values while generating theschema file

Posted by bismy <bi...@qq.com>.
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"<ma...@huawei.com>;
Date:  Thu, Jul 26, 2018 03:23 PM
To:  "dev@servicecomb.apache.org"<de...@servicecomb.apache.org>;
Cc:  "Vinay Murudi"<vi...@huawei.com>; "Sukesh A C"<su...@huawei.com>; "Mohammad Asif Siddiqui"<mo...@huawei.com>; 
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)