使用iris mvc做api,但返回的数据里的数字都变成了科学计数法: 3e5 这样的东西
看一下使用方式
func NewDefault() *iris.Application {
app := iris.New()
app.Logger().SetLevel("Debug")
// 设置路径
pathToAccessLog := "./log/access_log.%Y%m%d%H%M"
// 设置多久分一个文件出来
w, err := rotatelogs.New(
pathToAccessLog,
rotatelogs.WithMaxAge(24*time.Hour),
rotatelogs.WithRotationTime(time.Hour))
if err != nil {
panic(fmt.Sprintf("rotate logs setup failure: %s", err))
}
ac := accesslog.New(w)
ac.ResponseBody = true
// 设置输出到控制台
ac.AddOutput(app.Logger().Printer)
// 应用中间件
app.UseRouter(ac.Handler)
// Register the recovery, after accesslog and recover,
// before end-developer's middleware.
app.UseRouter(recover.New())
app.UseRouter(cors.AllowAll())
app.Validator = validator.NewValidator()
return app
}
func Run(port string) {
app := commonctrl.NewDefault()
mvcApp := mvc.New(app)
mvcApp.Party("auth").Handle(new(AuthController))
if err := app.Listen(port, iris.WithOptimizations); err != nil {
_, _ = fmt.Fprintf(os.Stderr, "user service start failure: %s\n", err)
return
}
}
复制代码
期望与结果
{"code":0,"msg":"success","data":1619568000}
实际得到结果
{"code":0,"msg":"success","data":1619568e30}
解决方案
accesslog设置 BodyMinify=true
ac.BodyMinify = true
复制代码
原因
accesslog设置 ResponseBody=true
的以后,中间件对返回值进行了一次读写导致
iris在写入json的时候,可以配置参数来默认驼峰命名、空值省略等,accesslog在读取ResponseBody的时候会再进行加工
有疑问加站长微信联系(非本文作者)