[go-server] add field name in parsing error messages (#18533)

Currently when a parsing rule of a field is not respected (eg: min/max
value, required, ...), the api only returns an  error message without
providing the field name to help the user to fix the request. This commit
add the field name to the error message to help the user of the API.
This commit is contained in:
rledisez 2024-05-01 07:28:51 -04:00 committed by GitHub
parent 10897caf37
commit 230e8ce887
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 112 additions and 92 deletions

View File

@ -120,7 +120,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
WithMaximum[float32]({{maximum}}),{{/maximum}}
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
{{/isNumber}}
@ -134,7 +134,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
WithMaximum[float32]({{maximum}}),{{/maximum}}
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
{{/isFloat}}
@ -148,7 +148,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
WithMaximum[float64]({{maximum}}),{{/maximum}}
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
{{/isDouble}}
@ -162,7 +162,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
WithMaximum[int64]({{maximum}}),{{/maximum}}
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
{{/isLong}}
@ -176,14 +176,14 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
WithMaximum[int32]({{maximum}}),{{/maximum}}
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
{{/isInteger}}
{{#isDateTime}}
{{paramName}}Param, err := parseTime({{#routers}}{{#mux}}params["{{baseName}}"]{{/mux}}{{#chi}}chi.URLParam(r, "{{baseName}}"){{/chi}}{{/routers}})
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
{{/isDateTime}}
@ -203,7 +203,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
{{#isEnumRef}}
{{paramName}}Param, err := New{{dataType}}FromValue({{#routers}}{{#mux}}params["{{baseName}}"]{{/mux}}{{#chi}}chi.URLParam(r, "{{baseName}}"){{/chi}}{{/routers}})
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
{{/isEnumRef}}
@ -220,7 +220,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
if query.Has("{{baseName}}"){
param, err := parseTime(query.Get("{{baseName}}"))
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
@ -242,7 +242,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
WithMaximum[float32]({{maximum}}),{{/maximum}}
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
@ -270,7 +270,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
WithMaximum[float32]({{maximum}}),{{/maximum}}
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
@ -298,7 +298,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
WithMaximum[float64]({{maximum}}),{{/maximum}}
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
@ -326,7 +326,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
WithMaximum[int64]({{maximum}}),{{/maximum}}
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
@ -354,7 +354,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
WithMaximum[int32]({{maximum}}),{{/maximum}}
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
@ -382,7 +382,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
WithMaximum[bool]({{maximum}}),{{/maximum}}
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
@ -409,7 +409,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
WithMaximum[float32]({{maximum}}),{{/maximum}}
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
{{/items.isNumber}}
@ -421,7 +421,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
WithMaximum[float32]({{maximum}}),{{/maximum}}
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
{{/items.isFloat}}
@ -433,7 +433,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
WithMaximum[float64]({{maximum}}),{{/maximum}}
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
{{/items.isDouble}}
@ -445,7 +445,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
WithMaximum[int64]({{maximum}}),{{/maximum}}
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
{{/items.isLong}}
@ -457,14 +457,14 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
WithMaximum[int32]({{maximum}}),{{/maximum}}
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
{{/items.isInteger}}
{{#items.isDateTime}}
{{paramName}}Param, err := parseTimes(query.Get("{{baseName"}}))
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
{{/items.isDateTime}}
@ -487,7 +487,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
for _, param := range paramSplits {
paramEnum, err := New{{items.dataType}}FromValue(param)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
{{paramName}}Param = append({{paramName}}Param, paramEnum)
@ -545,7 +545,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
param, err := ReadFormFileToTempFile(r, "{{baseName}}")
{{/isArray}}
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
@ -560,7 +560,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
WithMaximum[int64]({{maximum}}),{{/maximum}}
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
{{/isArray}}{{/isLong}}
@ -572,7 +572,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
WithMaximum[int32]({{maximum}}),{{/maximum}}
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "{{baseName}}", Err: err}, nil)
return
}
{{/isArray}}{{/isInteger}}

View File

@ -14,6 +14,7 @@ var (
// ParsingError indicates that an error has occurred when parsing request parameters
type ParsingError struct {
Param string
Err error
}
@ -22,7 +23,11 @@ func (e *ParsingError) Unwrap() error {
}
func (e *ParsingError) Error() string {
if e.Param == "" {
return e.Err.Error()
} else {
return e.Param + ": " + e.Err.Error()
}
}
// RequiredError indicates that an error has occurred when parsing request parameters

View File

@ -166,12 +166,12 @@ func Assert{{classname}}Constraints(obj {{classname}}) error {
{{#Vars}}
{{#minimum}}
if {{#isNullable}}obj.{{name}} != nil && *{{/isNullable}}obj.{{name}} < {{minimum}} {
return &ParsingError{Err: errors.New(errMsgMinValueConstraint)}
return &ParsingError{Param: "{{name}}", Err: errors.New(errMsgMinValueConstraint)}
}
{{/minimum}}
{{#maximum}}
if {{#isNullable}}obj.{{name}} != nil && *{{/isNullable}}obj.{{name}} > {{maximum}} {
return &ParsingError{Err: errors.New(errMsgMaxValueConstraint)}
return &ParsingError{Param: "{{name}}", Err: errors.New(errMsgMaxValueConstraint)}
}
{{/maximum}}
{{/Vars}}

View File

@ -129,7 +129,7 @@ func (c *PetAPIController) DeletePet(w http.ResponseWriter, r *http.Request) {
WithRequire[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "petId", Err: err}, nil)
return
}
apiKeyParam := r.Header.Get("api_key")
@ -193,7 +193,7 @@ func (c *PetAPIController) GetPetById(w http.ResponseWriter, r *http.Request) {
WithRequire[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "petId", Err: err}, nil)
return
}
result, err := c.service.GetPetById(r.Context(), petIdParam)
@ -244,7 +244,7 @@ func (c *PetAPIController) UpdatePetWithForm(w http.ResponseWriter, r *http.Requ
WithRequire[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "petId", Err: err}, nil)
return
}
@ -274,7 +274,7 @@ func (c *PetAPIController) UploadFile(w http.ResponseWriter, r *http.Request) {
WithRequire[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "petId", Err: err}, nil)
return
}
@ -284,7 +284,7 @@ func (c *PetAPIController) UploadFile(w http.ResponseWriter, r *http.Request) {
{
param, err := ReadFormFileToTempFile(r, "file")
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "file", Err: err}, nil)
return
}

View File

@ -112,7 +112,7 @@ func (c *StoreAPIController) GetOrderById(w http.ResponseWriter, r *http.Request
WithMaximum[int64](5),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "orderId", Err: err}, nil)
return
}
result, err := c.service.GetOrderById(r.Context(), orderIdParam)

View File

@ -190,7 +190,7 @@ func (c *UserAPIController) DeleteUser(w http.ResponseWriter, r *http.Request) {
WithParse[bool](parseBool),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "boolean_test", Err: err}, nil)
return
}
@ -256,7 +256,7 @@ func (c *UserAPIController) LoginUser(w http.ResponseWriter, r *http.Request) {
WithParse[int32](parseInt32),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "int32_test", Err: err}, nil)
return
}
@ -270,7 +270,7 @@ func (c *UserAPIController) LoginUser(w http.ResponseWriter, r *http.Request) {
WithParse[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "int64_test", Err: err}, nil)
return
}
@ -284,7 +284,7 @@ func (c *UserAPIController) LoginUser(w http.ResponseWriter, r *http.Request) {
WithParse[float32](parseFloat32),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "float32_test", Err: err}, nil)
return
}
@ -298,7 +298,7 @@ func (c *UserAPIController) LoginUser(w http.ResponseWriter, r *http.Request) {
WithParse[float64](parseFloat64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "float64_test", Err: err}, nil)
return
}
@ -312,7 +312,7 @@ func (c *UserAPIController) LoginUser(w http.ResponseWriter, r *http.Request) {
WithParse[bool](parseBool),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "boolean_test", Err: err}, nil)
return
}

View File

@ -23,6 +23,7 @@ var (
// ParsingError indicates that an error has occurred when parsing request parameters
type ParsingError struct {
Param string
Err error
}
@ -31,7 +32,11 @@ func (e *ParsingError) Unwrap() error {
}
func (e *ParsingError) Error() string {
if e.Param == "" {
return e.Err.Error()
} else {
return e.Param + ": " + e.Err.Error()
}
}
// RequiredError indicates that an error has occurred when parsing request parameters

View File

@ -161,7 +161,7 @@ func (c *PetAPIController) DeletePet(w http.ResponseWriter, r *http.Request) {
WithRequire[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "petId", Err: err}, nil)
return
}
apiKeyParam := r.Header.Get("api_key")
@ -185,7 +185,7 @@ func (c *PetAPIController) FilterPetsByCategory(w http.ResponseWriter, r *http.R
}
genderParam, err := NewGenderFromValue(params["gender"])
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "gender", Err: err}, nil)
return
}
var speciesParam Species
@ -204,7 +204,7 @@ func (c *PetAPIController) FilterPetsByCategory(w http.ResponseWriter, r *http.R
for _, param := range paramSplits {
paramEnum, err := NewSpeciesFromValue(param)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "notSpecies", Err: err}, nil)
return
}
notSpeciesParam = append(notSpeciesParam, paramEnum)
@ -270,7 +270,7 @@ func (c *PetAPIController) FindPetsByTags(w http.ResponseWriter, r *http.Request
if query.Has("bornAfter"){
param, err := parseTime(query.Get("bornAfter"))
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "bornAfter", Err: err}, nil)
return
}
@ -283,7 +283,7 @@ func (c *PetAPIController) FindPetsByTags(w http.ResponseWriter, r *http.Request
if query.Has("bornBefore"){
param, err := parseTime(query.Get("bornBefore"))
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "bornBefore", Err: err}, nil)
return
}
@ -315,7 +315,7 @@ func (c *PetAPIController) GetPetById(w http.ResponseWriter, r *http.Request) {
WithRequire[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "petId", Err: err}, nil)
return
}
result, err := c.service.GetPetById(r.Context(), petIdParam)
@ -336,7 +336,7 @@ func (c *PetAPIController) GetPetImageById(w http.ResponseWriter, r *http.Reques
WithRequire[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "petId", Err: err}, nil)
return
}
result, err := c.service.GetPetImageById(r.Context(), petIdParam)
@ -354,7 +354,7 @@ func (c *PetAPIController) GetPetsByTime(w http.ResponseWriter, r *http.Request)
params := mux.Vars(r)
createdTimeParam, err := parseTime(params["createdTime"])
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "createdTime", Err: err}, nil)
return
}
result, err := c.service.GetPetsByTime(r.Context(), createdTimeParam)
@ -381,7 +381,7 @@ func (c *PetAPIController) GetPetsUsingBooleanQueryParameters(w http.ResponseWri
WithParse[bool](parseBool),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "expr", Err: err}, nil)
return
}
@ -397,7 +397,7 @@ func (c *PetAPIController) GetPetsUsingBooleanQueryParameters(w http.ResponseWri
WithParse[bool](parseBool),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "grouping", Err: err}, nil)
return
}
@ -411,7 +411,7 @@ func (c *PetAPIController) GetPetsUsingBooleanQueryParameters(w http.ResponseWri
WithParse[bool](parseBool),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "inactive", Err: err}, nil)
return
}
@ -444,7 +444,7 @@ func (c *PetAPIController) SearchPet(w http.ResponseWriter, r *http.Request) {
WithParse[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "age", Err: err}, nil)
return
}
@ -458,7 +458,7 @@ func (c *PetAPIController) SearchPet(w http.ResponseWriter, r *http.Request) {
WithParse[float32](parseFloat32),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "price", Err: err}, nil)
return
}
@ -469,7 +469,7 @@ func (c *PetAPIController) SearchPet(w http.ResponseWriter, r *http.Request) {
if query.Has("bornAfter"){
param, err := parseTime(query.Get("bornAfter"))
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "bornAfter", Err: err}, nil)
return
}
@ -483,7 +483,7 @@ func (c *PetAPIController) SearchPet(w http.ResponseWriter, r *http.Request) {
WithParse[bool](parseBool),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "old", Err: err}, nil)
return
}
@ -539,7 +539,7 @@ func (c *PetAPIController) UpdatePetWithForm(w http.ResponseWriter, r *http.Requ
WithRequire[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "petId", Err: err}, nil)
return
}
@ -570,7 +570,7 @@ func (c *PetAPIController) UploadFile(w http.ResponseWriter, r *http.Request) {
WithRequire[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "petId", Err: err}, nil)
return
}
@ -583,7 +583,7 @@ func (c *PetAPIController) UploadFile(w http.ResponseWriter, r *http.Request) {
{
param, err := ReadFormFileToTempFile(r, "file")
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "file", Err: err}, nil)
return
}
@ -613,7 +613,7 @@ func (c *PetAPIController) UploadFileArrayOfFiles(w http.ResponseWriter, r *http
WithRequire[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "petId", Err: err}, nil)
return
}
@ -623,7 +623,7 @@ func (c *PetAPIController) UploadFileArrayOfFiles(w http.ResponseWriter, r *http
{
param, err := ReadFormFilesToTempFiles(r, "files")
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "files", Err: err}, nil)
return
}

View File

@ -114,7 +114,7 @@ func (c *StoreAPIController) GetOrderById(w http.ResponseWriter, r *http.Request
WithMaximum[int64](5),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "orderId", Err: err}, nil)
return
}
result, err := c.service.GetOrderById(r.Context(), orderIdParam)

View File

@ -191,7 +191,7 @@ func (c *UserAPIController) DeleteUser(w http.ResponseWriter, r *http.Request) {
WithParse[bool](parseBool),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "boolean_test", Err: err}, nil)
return
}
@ -258,7 +258,7 @@ func (c *UserAPIController) LoginUser(w http.ResponseWriter, r *http.Request) {
WithParse[bool](parseBool),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "boolean_test", Err: err}, nil)
return
}

View File

@ -23,6 +23,7 @@ var (
// ParsingError indicates that an error has occurred when parsing request parameters
type ParsingError struct {
Param string
Err error
}
@ -31,7 +32,11 @@ func (e *ParsingError) Unwrap() error {
}
func (e *ParsingError) Error() string {
if e.Param == "" {
return e.Err.Error()
} else {
return e.Param + ": " + e.Err.Error()
}
}
// RequiredError indicates that an error has occurred when parsing request parameters

View File

@ -160,7 +160,7 @@ func (c *PetAPIController) DeletePet(w http.ResponseWriter, r *http.Request) {
WithRequire[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "petId", Err: err}, nil)
return
}
apiKeyParam := r.Header.Get("api_key")
@ -183,7 +183,7 @@ func (c *PetAPIController) FilterPetsByCategory(w http.ResponseWriter, r *http.R
}
genderParam, err := NewGenderFromValue(chi.URLParam(r, "gender"))
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "gender", Err: err}, nil)
return
}
var speciesParam Species
@ -202,7 +202,7 @@ func (c *PetAPIController) FilterPetsByCategory(w http.ResponseWriter, r *http.R
for _, param := range paramSplits {
paramEnum, err := NewSpeciesFromValue(param)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "notSpecies", Err: err}, nil)
return
}
notSpeciesParam = append(notSpeciesParam, paramEnum)
@ -267,7 +267,7 @@ func (c *PetAPIController) FindPetsByTags(w http.ResponseWriter, r *http.Request
if query.Has("bornAfter"){
param, err := parseTime(query.Get("bornAfter"))
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "bornAfter", Err: err}, nil)
return
}
@ -280,7 +280,7 @@ func (c *PetAPIController) FindPetsByTags(w http.ResponseWriter, r *http.Request
if query.Has("bornBefore"){
param, err := parseTime(query.Get("bornBefore"))
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "bornBefore", Err: err}, nil)
return
}
@ -311,7 +311,7 @@ func (c *PetAPIController) GetPetById(w http.ResponseWriter, r *http.Request) {
WithRequire[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "petId", Err: err}, nil)
return
}
result, err := c.service.GetPetById(r.Context(), petIdParam)
@ -331,7 +331,7 @@ func (c *PetAPIController) GetPetImageById(w http.ResponseWriter, r *http.Reques
WithRequire[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "petId", Err: err}, nil)
return
}
result, err := c.service.GetPetImageById(r.Context(), petIdParam)
@ -348,7 +348,7 @@ func (c *PetAPIController) GetPetImageById(w http.ResponseWriter, r *http.Reques
func (c *PetAPIController) GetPetsByTime(w http.ResponseWriter, r *http.Request) {
createdTimeParam, err := parseTime(chi.URLParam(r, "createdTime"))
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "createdTime", Err: err}, nil)
return
}
result, err := c.service.GetPetsByTime(r.Context(), createdTimeParam)
@ -375,7 +375,7 @@ func (c *PetAPIController) GetPetsUsingBooleanQueryParameters(w http.ResponseWri
WithParse[bool](parseBool),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "expr", Err: err}, nil)
return
}
@ -391,7 +391,7 @@ func (c *PetAPIController) GetPetsUsingBooleanQueryParameters(w http.ResponseWri
WithParse[bool](parseBool),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "grouping", Err: err}, nil)
return
}
@ -405,7 +405,7 @@ func (c *PetAPIController) GetPetsUsingBooleanQueryParameters(w http.ResponseWri
WithParse[bool](parseBool),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "inactive", Err: err}, nil)
return
}
@ -438,7 +438,7 @@ func (c *PetAPIController) SearchPet(w http.ResponseWriter, r *http.Request) {
WithParse[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "age", Err: err}, nil)
return
}
@ -452,7 +452,7 @@ func (c *PetAPIController) SearchPet(w http.ResponseWriter, r *http.Request) {
WithParse[float32](parseFloat32),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "price", Err: err}, nil)
return
}
@ -463,7 +463,7 @@ func (c *PetAPIController) SearchPet(w http.ResponseWriter, r *http.Request) {
if query.Has("bornAfter"){
param, err := parseTime(query.Get("bornAfter"))
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "bornAfter", Err: err}, nil)
return
}
@ -477,7 +477,7 @@ func (c *PetAPIController) SearchPet(w http.ResponseWriter, r *http.Request) {
WithParse[bool](parseBool),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "old", Err: err}, nil)
return
}
@ -532,7 +532,7 @@ func (c *PetAPIController) UpdatePetWithForm(w http.ResponseWriter, r *http.Requ
WithRequire[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "petId", Err: err}, nil)
return
}
@ -562,7 +562,7 @@ func (c *PetAPIController) UploadFile(w http.ResponseWriter, r *http.Request) {
WithRequire[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "petId", Err: err}, nil)
return
}
@ -575,7 +575,7 @@ func (c *PetAPIController) UploadFile(w http.ResponseWriter, r *http.Request) {
{
param, err := ReadFormFileToTempFile(r, "file")
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "file", Err: err}, nil)
return
}
@ -604,7 +604,7 @@ func (c *PetAPIController) UploadFileArrayOfFiles(w http.ResponseWriter, r *http
WithRequire[int64](parseInt64),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "petId", Err: err}, nil)
return
}
@ -614,7 +614,7 @@ func (c *PetAPIController) UploadFileArrayOfFiles(w http.ResponseWriter, r *http
{
param, err := ReadFormFilesToTempFiles(r, "files")
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "files", Err: err}, nil)
return
}

View File

@ -112,7 +112,7 @@ func (c *StoreAPIController) GetOrderById(w http.ResponseWriter, r *http.Request
WithMaximum[int64](5),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "orderId", Err: err}, nil)
return
}
result, err := c.service.GetOrderById(r.Context(), orderIdParam)

View File

@ -190,7 +190,7 @@ func (c *UserAPIController) DeleteUser(w http.ResponseWriter, r *http.Request) {
WithParse[bool](parseBool),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "boolean_test", Err: err}, nil)
return
}
@ -256,7 +256,7 @@ func (c *UserAPIController) LoginUser(w http.ResponseWriter, r *http.Request) {
WithParse[bool](parseBool),
)
if err != nil {
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
c.errorHandler(w, r, &ParsingError{Param: "boolean_test", Err: err}, nil)
return
}

View File

@ -23,6 +23,7 @@ var (
// ParsingError indicates that an error has occurred when parsing request parameters
type ParsingError struct {
Param string
Err error
}
@ -31,7 +32,11 @@ func (e *ParsingError) Unwrap() error {
}
func (e *ParsingError) Error() string {
if e.Param == "" {
return e.Err.Error()
} else {
return e.Param + ": " + e.Err.Error()
}
}
// RequiredError indicates that an error has occurred when parsing request parameters