今天我给大家带来《如何使用搜索到的数据编写响应 - Go-swagger & gORM》,这篇文章主要讲到等等知识,如果你对golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!
问题内容
我使用 go-swagger 和 gorm 进行 Mysql 查询,我的处理程序之一是(检索一条记录)
api.usersusergetbyidhandler = users.usergetbyidhandlerfunc(func(params users.usergetbyidparams) middleware.responder {
db := dbconn()
user := user{}
res := db.table("users").where("id = ?", params.userid).select("id, email, passWord, name").scan(&user)
if res.recordnotfound() {
message := "user not exists"
return users.newusergetbyiddefault(500).withpayload(&models.error{message: &message})
}
log.info(user) // {21 [email protected] 123456 second}
return users.newusergetbyidok() //how return right response there???
//.writeresponse()
})
或检索表用户的所有数据
api.usersuserlisthandler = users.userlisthandlerfunc(func(params users.userlistparams) middleware.responder {
db := dbconn()
var user []user
var count int
db.table("users").select("id, email, password, name").scan(&user).count(&count)
log.info(db.recordnotfound())
if count == 0 {
message := "user not exists"
return users.newusergetbyiddefault(500).withpayload(&models.error{message: &message})
}
return users.newusergetbyidok()
})
用户 gorm 结构是
type User struct { // user
ID int64 `gorm:"AUTO_INCREMENT"`
Email string `gorm:"type:varchar(200);unique_index"`
Password string `gorm:"size:200"`
Name string `gorm:"type:varchar(200)`
}
与 models.users 相同
如何正确返回数据?我尝试使用 writeresponse 和 withpayload 但不成功
解决方案
有一个答案:
第一次改变
user := user{}
到
user := new(models.users)
并在末尾添加
ret := make([]*models.users, 0)
ret = append(ret, user)
return users.newusergetbyidok().withpayload(ret)
withpayload函数表单文件*_responses.go定义为
// WithPayload adds the payload to the user get by Id o k response
func (o *UserGetByIDOK) WithPayload(payload []*models.Users) *UserGetByIDOK {
o.Payload = payload
return o
}
理论要掌握,实操不能落!以上关于《如何使用搜索到的数据编写响应 - go-swagger & gorm》的详细介绍,大家都掌握了吧!