forked from mirror/gin
Fixes Content.Negotiate API
This commit is contained in:
parent
ffea7e88a2
commit
275bdc194e
42
context.go
42
context.go
|
@ -82,6 +82,7 @@ func (engine *Engine) createContext(w http.ResponseWriter, req *http.Request, pa
|
|||
c.handlers = handlers
|
||||
c.Keys = nil
|
||||
c.index = -1
|
||||
c.accepted = nil
|
||||
c.Errors = c.Errors[0:0]
|
||||
return c
|
||||
}
|
||||
|
@ -280,47 +281,34 @@ func (c *Context) File(filepath string) {
|
|||
/************************************/
|
||||
/******** CONTENT NEGOTIATION *******/
|
||||
/************************************/
|
||||
|
||||
type Negotiate struct {
|
||||
Offered []string
|
||||
Data interface{}
|
||||
JsonData interface{}
|
||||
XMLData interface{}
|
||||
HTMLData interface{}
|
||||
HTMLPath string
|
||||
HTMLData interface{}
|
||||
JSONData interface{}
|
||||
XMLData interface{}
|
||||
Data interface{}
|
||||
}
|
||||
|
||||
func (c *Context) Negotiate2(code int, config Negotiate) {
|
||||
func (c *Context) Negotiate(code int, config Negotiate) {
|
||||
result := c.NegotiateFormat(config.Offered...)
|
||||
switch result {
|
||||
case MIMEJSON:
|
||||
c.JSON(code, config.Data)
|
||||
|
||||
case MIMEHTML:
|
||||
name := config.HTMLPath
|
||||
c.HTML(code, name, config.Data)
|
||||
|
||||
case MIMEXML:
|
||||
c.XML(code, config.Data)
|
||||
default:
|
||||
c.Fail(400, errors.New("m"))
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Context) Negotiate(code int, config map[string]interface{}, offerts ...string) {
|
||||
result := c.NegotiateFormat(offerts...)
|
||||
switch result {
|
||||
case MIMEJSON:
|
||||
data := readData("json.data", config)
|
||||
data := chooseData(config.JSONData, config.Data)
|
||||
c.JSON(code, data)
|
||||
|
||||
case MIMEHTML:
|
||||
data := readData("html.data", config)
|
||||
name := config["html.path"].(string)
|
||||
c.HTML(code, name, data)
|
||||
data := chooseData(config.HTMLData, config.Data)
|
||||
if len(config.HTMLPath) == 0 {
|
||||
panic("negotiate config is wrong. html path is needed")
|
||||
}
|
||||
c.HTML(code, config.HTMLPath, data)
|
||||
|
||||
case MIMEXML:
|
||||
data := readData("xml.data", config)
|
||||
data := chooseData(config.XMLData, config.Data)
|
||||
c.XML(code, data)
|
||||
|
||||
default:
|
||||
c.Fail(400, errors.New("m"))
|
||||
}
|
||||
|
|
16
utils.go
16
utils.go
|
@ -46,16 +46,14 @@ func filterFlags(content string) string {
|
|||
return content
|
||||
}
|
||||
|
||||
func readData(key string, config map[string]interface{}) interface{} {
|
||||
data, ok := config[key]
|
||||
if ok {
|
||||
return data
|
||||
func chooseData(custom, wildcard interface{}) interface{} {
|
||||
if custom == nil {
|
||||
if wildcard == nil {
|
||||
panic("negotiation config is invalid")
|
||||
}
|
||||
return wildcard
|
||||
}
|
||||
data, ok = config["*.data"]
|
||||
if !ok {
|
||||
panic("negotiation config is invalid")
|
||||
}
|
||||
return data
|
||||
return custom
|
||||
}
|
||||
|
||||
func parseAccept(accept string) []string {
|
||||
|
|
Loading…
Reference in New Issue