英文:
Golang RESTAPI returns wrong data
问题
当我使用调试器时,"metricId"返回的Metric对象的所有值都是0或null(与输出相同)。
我在这里做错了什么?
数据库连接是正常的。
func GetMetricById(c *gin.Context) {
metricId := c.Param("id")
conn := config.DatabaseConnect()
var obj models.Metric
rows := conn.QueryRow("SELECT * FROM Metric WHERE id = ?", metricId)
err := rows.Scan(&obj.Id, &obj.Sms, &obj.Absence, &obj.Pregnant, &obj.Uwv_notifications, &obj.Wia_dossiers_started, &obj.Employees, &obj.Data_id, &obj.Date, &obj.Type)
if err != nil {
fmt.Println(err.Error())
}
fmt.Println(obj, "Metric Object that is called.")
c.JSON(http.StatusOK, obj)
}
输出:
{
"Id": 0,
"Sms": 0,
"Absence": 0,
"Pregnant": 0,
"Uwv_notifications": 0,
"Wia_dossiers_started": 0,
"Employees": 0,
"Data_id": 0,
"Date": "",
"Type": 0
}
英文:
When i use the debugger the metricId
returns the Metric Object with all 0 or null
values (same as the output).
what am i doing wrong here?
The Database connection works.
func GetMetricById(c *gin.Context) {
metricId := c.Param("id")
conn := config.DatabaseConnect()
var obj models.Metric
rows := conn.QueryRow("SELECT * FROM Metric WHERE id = ?", metricId)
err := rows.Scan(&obj.Id, &obj.Sms, &obj.Absence, &obj.Pregnant, &obj.Uwv_notifications, &obj.Wia_dossiers_started, &obj.Employees, &obj.Data_id, &obj.Date, &obj.Type)
if err != nil {
fmt.Println(err.Error())
}
fmt.Println(obj, "Metric Object that is called.")
c.JSON(http.StatusOK, obj)
}
OUTPUT:
{
"Id": 0,
"Sms": 0,
"Absence": 0,
"Pregnant": 0,
"Uwv_notifications": 0,
"Wia_dossiers_started": 0,
"Employees": 0,
"Data_id": 0,
"Date": "",
"Type": 0
}
答案1
得分: 1
我认为解决方案可能是使用metricId := c.Params.ByName("id")
而不是metricId := c.Param("id")
。
英文:
I think the solution may be to use metricId := c.Params.ByName("id")
instead of metricId := c.Param("id")
答案2
得分: 1
func GetMetricsByDataId(c *gin.Context) {
queryParams := c.Request.URL.Query()
conn := config.DatabaseConnect()
var metrObject []models.Metric
rows, _ := conn.Query("SELECT * FROM Metric WHERE data_id = ?", queryParams.Get("data_id"))
defer rows.Next()
for rows.Next() {
var obj models.Metric
if err := rows.Scan(&obj.Id, &obj.Sms, &obj.Absence, &obj.Pregnant, &obj.Uwv_notifications, &obj.Wia_dossiers_started, &obj.Employees, &obj.Data_id, &obj.Date, &obj.Type); err != nil {
_ = fmt.Errorf(err.Error())
}
metrObject = append(metrObject, obj)
}
if err := rows.Err(); err != nil {
_ = fmt.Errorf(err.Error())
}
c.JSON(http.StatusOK, metrObject)
}
像这样它可以工作
localhost:8082/billing/getmetricbydataid?data_id=150295
通过这个API调用
英文:
[ANSWER]
func GetMetricsByDataId(c *gin.Context) {
queryParams := c.Request.URL.Query()
conn := config.DatabaseConnect()
var metrObject []models.Metric
rows, _ := conn.Query("SELECT * FROM Metric WHERE data_id = ?", queryParams.Get("data_id"))
defer rows.Next()
for rows.Next() {
var obj models.Metric
if err := rows.Scan(&obj.Id, &obj.Sms, &obj.Absence, &obj.Pregnant, &obj.Uwv_notifications, &obj.Wia_dossiers_started, &obj.Employees, &obj.Data_id, &obj.Date, &obj.Type); err != nil {
_ = fmt.Errorf(err.Error())
}
metrObject = append(metrObject, obj)
}
if err := rows.Err(); err != nil {
_ = fmt.Errorf(err.Error())
}
c.JSON(http.StatusOK, metrObject)
}
Like this it works
localhost:8082/billing/getmetricbydataid?data_id=150295
With this API call
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论