mirror of https://github.com/gofiber/fiber.git
Merge pull request #1121 from yquansah/yq-override-json
feat: add definition for overridable json enginepull/1144/head v2.4.0
commit
267fd5ec59
11
app.go
11
app.go
|
@ -12,6 +12,7 @@ package fiber
|
|||
import (
|
||||
"bufio"
|
||||
"crypto/tls"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net"
|
||||
|
@ -272,6 +273,13 @@ type Config struct {
|
|||
//
|
||||
// Default: false
|
||||
// RedirectFixedPath bool
|
||||
|
||||
// When set by an external client of Fiber it will use the provided implementation of a
|
||||
// JSONMarshal
|
||||
//
|
||||
// Allowing for flexibility in using another json library for encoding
|
||||
// Default: json.Marshal
|
||||
JSONEncoder utils.JSONMarshal `json:"-"`
|
||||
}
|
||||
|
||||
// Static defines configuration options when defining static assets.
|
||||
|
@ -385,6 +393,9 @@ func New(config ...Config) *App {
|
|||
if app.config.ErrorHandler == nil {
|
||||
app.config.ErrorHandler = DefaultErrorHandler
|
||||
}
|
||||
if app.config.JSONEncoder == nil {
|
||||
app.config.JSONEncoder = json.Marshal
|
||||
}
|
||||
|
||||
// Init app
|
||||
app.init()
|
||||
|
|
2
ctx.go
2
ctx.go
|
@ -536,7 +536,7 @@ func (c *Ctx) Is(extension string) bool {
|
|||
// and a nil slice encodes as the null JSON value.
|
||||
// This method also sets the content header to application/json.
|
||||
func (c *Ctx) JSON(data interface{}) error {
|
||||
raw, err := json.Marshal(data)
|
||||
raw, err := c.app.config.JSONEncoder(data)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
package utils
|
||||
|
||||
// JSONMarshal is the standard definition of representing a Go structure in
|
||||
// json format
|
||||
type JSONMarshal func(interface{}) ([]byte, error)
|
|
@ -0,0 +1,26 @@
|
|||
package utils
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestDefaultJSONEncoder(t *testing.T) {
|
||||
type SampleStructure struct {
|
||||
ImportantString string `json:"important_string"`
|
||||
}
|
||||
|
||||
var (
|
||||
sampleStructure = &SampleStructure{
|
||||
ImportantString: "Hello World",
|
||||
}
|
||||
importantString = `{"important_string":"Hello World"}`
|
||||
|
||||
jsonEncoder JSONMarshal = json.Marshal
|
||||
)
|
||||
|
||||
raw, err := jsonEncoder(sampleStructure)
|
||||
AssertEqual(t, err, nil)
|
||||
|
||||
AssertEqual(t, string(raw), importantString)
|
||||
}
|
Loading…
Reference in New Issue