improve content type response for ghttp.Server

This commit is contained in:
John Guo
2021-12-17 17:42:18 +08:00
parent 20c0e6d68f
commit 656d1bbbd6
4 changed files with 10 additions and 5 deletions

View File

@ -129,6 +129,9 @@ const (
methodNameShut = "Shut"
methodNameExit = "Exit"
ctxKeyForRequest = "gHttpRequestObject"
contentTypeXml = "text/xml"
contentTypeHtml = "text/html"
contentTypeJson = "application/json"
swaggerUIPackedPath = "/goframe/swaggerui"
)

View File

@ -18,6 +18,7 @@ import (
// WriteTpl parses and responses given template file.
// The parameter `params` specifies the template variables for parsing.
func (r *Response) WriteTpl(tpl string, params ...gview.Params) error {
r.Header().Set("Content-Type", contentTypeHtml)
b, err := r.ParseTpl(tpl, params...)
if err != nil {
if !gmode.IsProduct() {
@ -32,6 +33,7 @@ func (r *Response) WriteTpl(tpl string, params ...gview.Params) error {
// WriteTplDefault parses and responses the default template file.
// The parameter `params` specifies the template variables for parsing.
func (r *Response) WriteTplDefault(params ...gview.Params) error {
r.Header().Set("Content-Type", contentTypeHtml)
b, err := r.ParseTplDefault(params...)
if err != nil {
if !gmode.IsProduct() {
@ -46,6 +48,7 @@ func (r *Response) WriteTplDefault(params ...gview.Params) error {
// WriteTplContent parses and responses the template content.
// The parameter `params` specifies the template variables for parsing.
func (r *Response) WriteTplContent(content string, params ...gview.Params) error {
r.Header().Set("Content-Type", contentTypeHtml)
b, err := r.ParseTplContent(content, params...)
if err != nil {
if !gmode.IsProduct() {

View File

@ -103,10 +103,10 @@ func (r *Response) WriteflnExit(format string, params ...interface{}) {
// WriteJson writes `content` to the response with JSON format.
func (r *Response) WriteJson(content interface{}) error {
r.Header().Set("Content-Type", contentTypeJson)
// If given string/[]byte, response it directly to client.
switch content.(type) {
case string, []byte:
r.Header().Set("Content-Type", "application/json")
r.Write(gconv.String(content))
return nil
}
@ -114,7 +114,6 @@ func (r *Response) WriteJson(content interface{}) error {
if b, err := json.Marshal(content); err != nil {
return err
} else {
r.Header().Set("Content-Type", "application/json")
r.Write(b)
}
return nil
@ -135,10 +134,10 @@ func (r *Response) WriteJsonExit(content interface{}) error {
//
// Note that there should be a "callback" parameter in the request for JSONP format.
func (r *Response) WriteJsonP(content interface{}) error {
r.Header().Set("Content-Type", contentTypeJson)
// If given string/[]byte, response it directly to client.
switch content.(type) {
case string, []byte:
r.Header().Set("Content-Type", "application/json")
r.Write(gconv.String(content))
return nil
}
@ -175,17 +174,16 @@ func (r *Response) WriteJsonPExit(content interface{}) error {
// WriteXml writes `content` to the response with XML format.
func (r *Response) WriteXml(content interface{}, rootTag ...string) error {
r.Header().Set("Content-Type", contentTypeXml)
// If given string/[]byte, response it directly to client.
switch content.(type) {
case string, []byte:
r.Header().Set("Content-Type", "application/xml")
r.Write(gconv.String(content))
return nil
}
if b, err := gjson.New(content).ToXml(rootTag...); err != nil {
return err
} else {
r.Header().Set("Content-Type", "application/xml")
r.Write(b)
}
return nil