我是Go的新手,我在使用Gin的API正确返回信息时遇到了麻烦。我正在使用Postman来POST一个新条目,每次都为Phone对象和一个Logs对象数组创建一个新的UUID。它只返回了phone对象的信息。第二个对象数组返回了0值和一个在Postman中创建的201状态。我只使用POST方法。
我已经重构了它很多次,这是我所得到的最接近的。我仍然不认为它允许我在数组中接收多个日志对象作为响应。我该如何修复这个问题?是否可以使用map[string]interface{}来完成此操作?
这是我当前的代码
package main
import (
"net/http"
"time"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
)
// For id of log
type ID struct {
ID string `json:"id"`
}
// Phone Models
type Phone struct {
ID string `json:"id"`
Model string `json:"model"`
Type string `json:"type"`
}
type Logs struct {
Barcode int `json:"barcode"`
Created time.Time `json:"created"`
Present int `json:"present"`
ElectricEnergy int `json:"electricEnergy"`
Power int `json:"power"`
TimeCharged int `json:"timeCharged"`
AmountUsed int `json:"amountUsed"`
}
func createPhoneLog(c *gin.Context) {
var newDevice Phone
if err := c.ShouldBindJSON(&newDevice); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
phones := Phone{
ID: newDevice.ID,
Model: newDevice.Model,
Type: newDevice.Type,
}
var newPhoneRecord Logs
// if err := c.ShouldBindJSON(&newPhoneRecord); err != nil {
// c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
// return
// }
r := &Logs{
Barcode: newPhoneRecord.Barcode,
Created: newPhoneRecord.Created,
Present: newPhoneRecord.Present,
ElectricEnergy: newPhoneRecord.ElectricEnergy,
Power: newPhoneRecord.Power,
TimeCharged: newPhoneRecord.TimeCharged,
AmountUsed: newPhoneRecord.AmountUsed,
}
type deviceWrapper struct {
ID string `json:"id"`
Phone Phone `json:"phone"`
Logs Logs `json:"logs"`
}
//Generate new UUID
var newDeviceLogID ID
newDeviceLogID.ID = uuid.New().String()
c.JSON(http.StatusCreated, &deviceWrapper{
ID: newDeviceLogID.ID,
Phone: phones,
Logs: *r,
})
}
func main() {
router := gin.Default()
router.POST("/", createPhoneLog)
router.Run("0.0.0.0:8080")
}
`
* 这就是我在 Postman 身上看到的东西 *
Postman Response for Create Method
这是我需要看到的回应
我希望能够以这种格式接收这些对象中的所有信息。
{
"id": "PJDNSOfieC67GswNeUfYouhTSVS",
"phone": {
"id": "22DHOIRTNBKL5643",
"model": "iPhoneX",
"type": "1TB"
},
"logs": [
{
"barcode": 12904HGJ3403,
"created": 2,
"present": 3,
"electricEnergy": 4,
"power": 5,
"timeCharged": 1554,
"amountUsed":54
},
{
"barcode": 129739394276,
"created": 0001-01-01T00:00:00Z,
"present": 5,
"electricEnergy": 2,
"power": 6,
"timeCharged": 1127,
"amountUsed":92
}
]
}
1条答案
按热度按时间vptzau2j1#
您可以使用需要接受的值创建一个新的结构体,就像deviceWrapper一样。
例如:
type res { Id字符串
json:"id"
电话电话json:"phone"
日志[]日志json:"log"
}