Golang,Gin框架使用ShouldBindJSON时出现EOF报错

前言

做毕设ing,使用的是Gin框架做的一个简单的管理系统。但偶尔也会碰到一些稀奇古怪的Bug,因此记录一下。

问题描述

api是这样写的


func UserRegisterHandler(c *gin.Context, user *usecase.UserOperate) {if err := c.ShouldBindJSON(&UserRegisterRequest); err != nil {log.Error("eeeeeeeeeee", err)c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}userID, err := user.Register(c, UserRegisterRequest.Username, UserRegisterRequest.Password, UserRegisterRequest.Phone)if err != nil {c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})return}c.JSON(http.StatusOK, gin.H{"userID": userID})
}

其中结构体定义为

var UserRegisterRequest struct {Username string `json:"username"`Password string `json:"password"`Phone    string `json:"phone"`
}

Postman请求会报错EOF,确定是在ShouldBindJSON的地方出现了错误。
在这里插入图片描述

问题解决

先是发现自己忘记了加required标签…
修改后:

type UserRegisterRequest struct {Username string `json:"username" binding:"required"`Password string `json:"password" binding:"required"`Phone    string `json:"phone" binding:"required"`
}

同时换成了更简单的ShouldBind。发现报错改为:

Key: 'UserRegisterRequest.Password' Error:Field validation for 'Password' failed on the 'required' tag

遂搜索,参考https://blog.csdn.net/default7/article/details/114920194

发现是自己忘记了定义form…
修改后最终为:


type UserRegisterRequest struct {Username string ` form:"username" json:"username" binding:"required"`Password string `form:"password" json:"password" binding:"required"`Phone    string `form:"phone" json:"phone" binding:"required"`
}func UserRegisterHandler(c *gin.Context, user *usecase.UserOperate) {var userRegisterRequest UserRegisterRequestif err := c.ShouldBind(&userRegisterRequest); err == nil {c.JSON(http.StatusOK, gin.H{"user":     userRegisterRequest.Username,"password": userRegisterRequest.Password,"phone":    userRegisterRequest.Phone,})} else {log.Error("绑定JSON错误", err)c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}userID, err := user.Register(c, userRegisterRequest.Username, userRegisterRequest.Password, userRegisterRequest.Phone)if err != nil {c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})return}c.JSON(http.StatusOK, gin.H{"userID": userID})
}


成功!

总结反思

定义时候注意细节…Go的反引号标签要用好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/338841.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

构建中国人自己的私人GPT

创作不易,请大家多鼓励支持。 在现实生活中,很多人的资料是不愿意公布在互联网上的,但是我们又要使用人工智能的能力帮我们处理文件、做决策、执行命令那怎么办呢?于是我们构建自己或公司的私人GPT变得非常重要。 先看效果 一、…

Word插件-大珩助手-手写电子签名

手写签名 支持鼠标写,支持触摸屏写,点击画笔按钮切换橡皮擦,支持清空画板重写,点击在word中插入签名,可插入背景透明的签字图 素材库-保存签名 将写好的签字图复制粘贴到素材库中,以便永久使用&#xff…

thinkphp学习07-数据库的数据查询

单数据查询 单条数据查询,一般是一维数组 Db::table()中 table 必须指定完整数据表(包括前缀),如果配置了表前缀,Db::name()中可以忽略 如果希望只查询一条数据,可以使用 find()方法,需指定 wh…

【JaveWeb教程】(17) MySQL数据库开发之 MySQL简介、安装、数据类型、SQL通用语法 详细代码示例讲解

目录 前言1. MySQL概述1.1 安装1.1.1 版本1.1.2 安装1.1.3 连接1.1.4 企业使用方式(了解) 1.2 数据模型1.3 SQL简介1.3.1 SQL通用语法1.3.2 分类 前言 在我们讲解SpringBootWeb基础知识(请求响应案例)的时候,我们讲到在web开发中,为了应用程序职责单一&…

Redis-Cluster 与 Redis 集群的技术大比拼

欢迎来到我的博客,代码的世界里,每一行都是一个故事 Redis-Cluster 与 Redis 集群的技术大比拼 前言概念与原理对比Redis-Cluster:基于哈希槽的分布式解决方案传统 Redis 集群:主从架构下的数据分片方式 搭建与配置的异同Redis-Cl…

Hive基础题-1

别看我,不看答案我也不会写 正因为不会写,所以才要每天一练 本地hive练习题 SET hive.exec.mode.local.autotrue; -- 默认 false SET hive.exec.mode.local.auto.inputbytes.max50000000; SET hive.exec.mode.local.auto.input.files.max5; -- 默认 4# …

centos7安装ES

1.JDK安装 因为我这里安装的ES版本是7.9.3 因为项目用的1.8的JDK, 7.9.3又兼容1.8,我在这装了1.8的JDK 支持一览表的IP 支持一览表 | Elastic 先将jdk的tar.gz 文件拷入系统 tar -zxvf jdk-8u351-linux-x64.tar.gz 解压压缩包 配置环境变量 vim /etc/profile …

Github 2024-01-11Go开源项目日报 Top9

根据Github Trendings的统计,今日(2024-01-11统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目9 Gin Web框架:高性能的Go HTTP框架 创建周期:3496 天开发语言:Go协…

视频监控录像服务器(中心录像服务器)功能详细介绍

目 录 一、概述 (一)定义 (二)视频监控中心录像服务器 二、存储策略服务 (一)存储策略配置 1、 录入页面 2、 选择需要进行录像的视频 3、批量选择多个通道号 4、其他关键参数…

代码随想录算法训练营第一天|数组理论基础、704二分查找、27移除元素

数组理论基础 一维数组 数组中的元素在内存空间中是连续的数组名与数组中第一个元素的地址相同(一维数组)数组的下标从0开始删除数组的元素其实是用后面的元素覆盖掉要删除的元素数组的长度不能改变 二维数组 二维数组是按照行存储的,也是…

【深度学习:数据标签 】什么是数据标签?【2024】终极指南

【深度学习:数据标签 】什么是数据标签?【2024】终极指南 了解数据标记什么是数据标注?数据标注在机器学习中的意义 数据标签如何工作?标记数据与未标记数据手动数据收集开源数据集合成数据生成数据标记过程确保数据安全与合规 数…

网络安全B模块(笔记详解)- Web信息收集

Web信息收集 1.通过Kali对服务器场景Linux进行Web扫描渗透测试(使用工具nikto,查看该命令的完整帮助文件),并将该操作使用命令中固定不变的字符串作为Flag提交; Flag:nikto -H 2.通过Kali对服务器场景Linux进行Web扫描渗透测试(使用工具nikto,扫描目标服务器8080端口,…