forked from loafle/openapi-generator-original
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.
69 lines
2.2 KiB
Go
69 lines
2.2 KiB
Go
// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
|
|
|
|
/*
|
|
* OpenAPI Petstore
|
|
*
|
|
* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters.
|
|
*
|
|
* API version: 1.0.0
|
|
*/
|
|
|
|
package petstoreserver
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
)
|
|
|
|
var (
|
|
// ErrTypeAssertionError is thrown when type an interface does not match the asserted type
|
|
ErrTypeAssertionError = errors.New("unable to assert type")
|
|
)
|
|
|
|
// ParsingError indicates that an error has occurred when parsing request parameters
|
|
type ParsingError struct {
|
|
Param string
|
|
Err error
|
|
}
|
|
|
|
func (e *ParsingError) Unwrap() error {
|
|
return e.Err
|
|
}
|
|
|
|
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
|
|
type RequiredError struct {
|
|
Field string
|
|
}
|
|
|
|
func (e *RequiredError) Error() string {
|
|
return fmt.Sprintf("required field '%s' is zero value.", e.Field)
|
|
}
|
|
|
|
// ErrorHandler defines the required method for handling error. You may implement it and inject this into a controller if
|
|
// you would like errors to be handled differently from the DefaultErrorHandler
|
|
type ErrorHandler func(w http.ResponseWriter, r *http.Request, err error, result *ImplResponse)
|
|
|
|
// DefaultErrorHandler defines the default logic on how to handle errors from the controller. Any errors from parsing
|
|
// request params will return a StatusBadRequest. Otherwise, the error code originating from the servicer will be used.
|
|
func DefaultErrorHandler(w http.ResponseWriter, r *http.Request, err error, result *ImplResponse) {
|
|
if _, ok := err.(*ParsingError); ok {
|
|
// Handle parsing errors
|
|
EncodeJSONResponse(err.Error(), func(i int) *int { return &i }(http.StatusBadRequest), map[string][]string{}, w)
|
|
} else if _, ok := err.(*RequiredError); ok {
|
|
// Handle missing required errors
|
|
EncodeJSONResponse(err.Error(), func(i int) *int { return &i }(http.StatusUnprocessableEntity), map[string][]string{}, w)
|
|
} else {
|
|
// Handle all other errors
|
|
EncodeJSONResponse(err.Error(), &result.Code, result.Headers, w)
|
|
}
|
|
}
|