You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@servicecomb.apache.org by bismy <bi...@qq.com> on 2018/07/27 03:39:15 UTC

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

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)
>> >
>>
>
>