Categories: GoFrame 教程

GoFrame 请求输入-JSON/XML

从​GoFrame v1.11​版本开始,​Request​对象提供了对客户端提交的​JSON/XML​数据格式的原生支持,为开发者提供了更便捷的数据获取特性,以进一步提高开发效率。

示例1,简单示例

package main

import (
 "github.com/gogf/gf/v2/frame/g"
 "github.com/gogf/gf/v2/net/ghttp"
)

func main() {
 s := g.Server()
 s.BindHandler("/", func(r *ghttp.Request) {
  r.Response.Writef("name: %v, pass: %v", r.Get("name"), r.Get("pass"))
 })
 s.SetPort(8199)
 s.Run()
}

执行后,我们通过​curl​工具提交数据来测试一下:

  • Query​数据格式
$ curl "http://127.0.0.1:8199/?name=john&pass=123"
name: john, pass: 123
  • Form​表单提交
$ curl -d "name=john&pass=123" "http://127.0.0.1:8199/"
name: john, pass: 123
  • JSON​数据格式
$ curl -d {"name":"john","pass":"123"} "http://127.0.0.1:8199/"
name: john, pass: 123
  • XML​数据格式
$ curl -d <?xml version="1.0" encoding="UTF-8"?><doc><name>john</name><pass>123</pass></doc> "http://127.0.0.1:8199/"
name: john, pass: 123


$ curl -d <doc><name>john</name><pass>123</pass></doc> "http://127.0.0.1:8199/"
name: john, pass: 123

示例2,对象转换及校验

package main

import (
 "github.com/gogf/gf/v2/frame/g"
 "github.com/gogf/gf/v2/net/ghttp"
 "github.com/gogf/gf/v2/util/gvalid"
)

type RegisterReq struct {
 Name  string `p:"username"  v:"required|length:6,30#请输入账号|账号长度为:min到:max位"`
 Pass  string `p:"password1" v:"required|length:6,30#请输入密码|密码长度不够"`
 Pass2 string `p:"password2" v:"required|length:6,30|same:password1#请确认密码|密码长度不够|两次密码不一致"`
}

type RegisterRes struct {
 Code  int         `json:"code"`
 Error string      `json:"error"`
 Data  interface{} `json:"data"`
}

func main() {
 s := g.Server()
 s.BindHandler("/register", func(r *ghttp.Request) {
  var req *RegisterReq
  if err := r.Parse(&req); err != nil {
   // Validation error.
   if v, ok := err.(gvalid.Error); ok {
    r.Response.WriteJsonExit(RegisterRes{
     Code:  1,
     Error: v.FirstString(),
    })
   }
   // Other error.
   r.Response.WriteJsonExit(RegisterRes{
    Code:  1,
    Error: err.Error(),
   })
  }
  // ...
  r.Response.WriteJsonExit(RegisterRes{
   Data: req,
  })
 })
 s.SetPort(8199)
 s.Run()
}

执行后,我们通过​curl​工具提交数据来测试一下:

  • JSON​数据格式
$ curl -d {"username":"johngcn","password1":"123456","password2":"123456"} "http://127.0.0.1:8199/register"
{"code":0,"error":"","data":{"Name":"johngcn","Pass":"123456","Pass2":"123456"}}


$ curl -d {"username":"johngcn","password1":"123456","password2":"123"} "http://127.0.0.1:8199/register"
{"code":1,"error":"两次密码不一致","data":null}

可以看到,我们提交的​JSON​内容也被​Parse​方法智能地转换为了结构体对象。

  • XML​数据格式
$ curl -d <?xml version="1.0" encoding="UTF-8"?><doc><username>johngcn</username><password1>123456</password1><password2>123456</password2></doc> "http://127.0.0.1:8199/register"
{"code":0,"error":"","data":{"Name":"johngcn","Pass":"123456","Pass2":"123456"}}


$ curl -d <?xml version="1.0" encoding="UTF-8"?><doc><username>johngcn</username><password1>123456</password1><password2>123</password2></doc> "http://127.0.0.1:8199/register"
{"code":1,"error":"两次密码不一致","data":null}

可以看到,我们提交的​XML​内容也被​Parse​方法智能地转换为了结构体对象。

andy

前端小白,在Web176教程网这个平台跟大家一起学习,加油!

Share
Published by
andy

Recent Posts

聊聊vue3中的defineProps

在Vue 3中,defineP…

1 周 ago

在 Chrome 中删除、允许和管理 Cookie

您可以选择删除现有 Cooki…

2 周 ago

自定义指令:聊聊vue中的自定义指令应用法则

今天我们来聊聊vue中的自定义…

3 周 ago

聊聊Vue中@click.stop和@click.prevent

一起来学下聊聊Vue中@cli…

4 周 ago

Nginx 基本操作:启动、停止、重启命令。

我们来学习Nginx基础操作:…

1 月 ago

Vue3:手动清理keep-alive组件缓存的方法

Vue3中手动清理keep-a…

1 月 ago