iris控制器函数需返回interface{}类型值以触发自动序列化,否则响应为空或报错;启用iris.default()或手动注册编码器,返回结构体/iris.map自动转json并设content-type,设状态码须在return前调用ctx.statuscode()。

在Iris框架中,控制器函数的返回值需要被自动序列化为HTTP响应体(如JSON、HTML或纯文本),否则浏览器只能看到空响应或500错误。这一步不配置好,所有接口都会无法返回有效数据。
启用自动响应序列化
确保你的应用启用了默认的响应处理器:调用 iris.Default() 而非 iris.New(),它已预设 JSON、HTML、文本等编码器。
若使用 iris.New(),必须手动注册编码器:app.RegisterContentType(iris.JSON, iris.JSONEncoder),否则返回结构体时会 panic。
控制器函数返回结构体自动转JSON
方法一:直接返回 Go 结构体或 map
在路由处理函数中 return 一个 struct 或 iris.Map,Iris 会自动调用 JSON 编码器并设置 Content-Type: application/json:
app.Get("/user", func(ctx iris.Context) { return iris.Map{"id": 1, "name": "Alice"} })
这一步操作起来很简单,直接 return 就行,无需 ctx.JSON() 调用;但前提是该函数签名必须是 func(iris.Context) interface{} ——【返回值类型必须是 interface{}】,写成 func(ctx iris.Context) string 就不会触发自动序列化。
返回自定义状态码和JSON混合响应
第一步:用 ctx.StatusCode() 显式设置状态码
第二步:return 任意可 JSON 序列化的值(struct/map/slice)
第三步:Iris 自动合并状态码与序列化后的内容
示例:app.Get("/error", func(ctx iris.Context) interface{} { ctx.StatusCode(404); return iris.Map{"code": 404, "message": "not found"} })
注意:不能先 return 再调用 StatusCode,顺序反了状态码会被忽略。
禁用自动序列化并手动控制响应
方法一:返回 nil 并自行调用 ctx.JSON()、ctx.Text() 等
方法二:返回 iris.Map 但加 ctx.StopExecution() 中断自动流程
这适合需要动态选择响应格式(如根据 Accept 头返回 JSON 或 XML)的场景。











