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)
