我试图解析mySQL错误,以便从我的golang API向用户返回干净的错误消息.我读了一篇像这样的文章,展示了我想做的事情,但看起来我正在使用的模块go-mysql-driver不支持parseError.
为了给出我尝试实现的具体示例,错误如下:
Error 1062: Duplicate entry 'John' for key 'name_UNIQUE'
Run Code Online (Sandbox Code Playgroud)
我希望能够构建一个数据结构,允许我组织信息,以返回用户友好的消息,如
Error with the field 'name': 'John' already exist"
Run Code Online (Sandbox Code Playgroud)
所以我也可以用不同的语言翻译它并直接打印到客户端.
谢谢!
根据官方文档,gin-gonic的 c.JSON应该将响应头设置为application/json,但是当我从Postman调用我的 API 时,响应头设置为text/plain; charset=utf-8
我不明白我错过了什么,有什么想法吗?
文件:
函数 JSON
JSON 将给定结构序列化为 JSON 到响应正文中。它还将 Content-Type 设置为“application/json”。
这是我的代码示例:
func postLogin(c *gin.Context) {
var credentials DTO.Credentials
if err := c.BindJSON(&credentials); err == nil {
c.JSON(buildResponse(services.CheckUserCredentials(credentials)))
} else {
var apiErrors = DTO.ApiErrors{}
for _, v := range err.(validator.ValidationErrors) {
apiErrors.Errors = append(apiErrors.Errors, DTO.ApiError{Field: v.Field, Message: v.Field + " is " + v.Tag})
}
c.JSON(http.StatusBadRequest, apiErrors)
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
经过调查, log.Println(c.Writer.Header().Get("Content-Type")) 不打印任何内容,显示 content-type 应该是空的。
func …Run Code Online (Sandbox Code Playgroud) 我目前正在学习spring,但我仍然坚持使用不适用于我的bean的验证注释.我真的不明白什么失踪,我需要一只手:)
我有一个控制器:
@Controller
public class CirclesController {
@RequestMapping(value = "/createCircle", method = RequestMethod.POST)
public ModelAndView createCircle(@Valid Circle circle, BindingResult res) {
if (res.hasErrors()) {
System.out.println("Can't validate this form..");
else
System.out.println("Created new circle : " + circle);
}
}
Run Code Online (Sandbox Code Playgroud)
还有一个豆子:
public class Circle {
@Size(min = 5) // This is what I try to validate
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
我配置了web.xml
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener> …Run Code Online (Sandbox Code Playgroud)