beego write header 坑

Posted 柳清风09

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了beego write header 坑相关的知识,希望对你有一定的参考价值。

一个普通公共方法,主要是处理json个数数据返回。

// Response return response
func (c *BaseController) Response(code int, data interface) 
	c.Ctx.ResponseWriter.WriteHeader(code)
	c.Data["json"] = data
	c.ServeJSON()

ServeJSON里面调用JSON方法,如下

func (output *BeegoOutput) JSON(data interface, hasIndent bool, encoding bool) error 
	output.Header("Content-Type", "application/json; charset=utf-8")

第一行就是输出json的头

但通过curl调用时候,却发现返回的头里面Content-Type

Content-Type: text/plain; charset=utf-8

神奇的世界
仔细研究研究WriteHeader方法

func (r *Response) WriteHeader(code int) 
	if r.Status > 0 
		//prevent multiple response.WriteHeader calls
		return
	
	r.Status = code
	r.Started = true
	r.ResponseWriter.WriteHeader(code)

发现了,它会校验当前返回码是否大于0,如果大于0表示这个状态码已经被设置,后续不允许再次设置。
所以后续的header的设置都是直接retrun。导致无法设置成功。
解决的办法就直接赋值code状态码

unc (c *BaseController) Response(code int, data interface) 
	c.Ctx.Output.Status = code
	c.Data["json"] = data
	c.ServeJSON()

以上是关于beego write header 坑的主要内容,如果未能解决你的问题,请参考以下文章

beego 读取配置

[Go] 开发 go web 项目,踩到的一些“坑”

从头用脚分析FFmpeg源码 - avformat_write_header

从content-type设置看Spring MVC处理header的一个坑

踩坑记录SQLException: Error writing file ‘C:WindowsTEMPMY8C3D.tmp‘ (Errcode: 28)

踩坑记录SQLException: Error writing file ‘C:WindowsTEMPMY8C3D.tmp‘ (Errcode: 28)