Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
B
beego
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
go
beego
Commits
7c80bf6f
Commit
7c80bf6f
authored
May 30, 2018
by
Ruben Cid
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add YAML
parent
c3c0adbf
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
55 additions
and
3 deletions
+55
-3
input.go
context/input.go
+5
-0
output.go
context/output.go
+15
-0
controller.go
controller.go
+8
-0
httplib.go
httplib/httplib.go
+26
-2
router.go
router.go
+1
-1
No files found.
context/input.go
View file @
7c80bf6f
...
...
@@ -37,6 +37,7 @@ var (
acceptsHTMLRegex
=
regexp
.
MustCompile
(
`(text/html|application/xhtml\+xml)(?:,|$)`
)
acceptsXMLRegex
=
regexp
.
MustCompile
(
`(application/xml|text/xml)(?:,|$)`
)
acceptsJSONRegex
=
regexp
.
MustCompile
(
`(application/json)(?:,|$)`
)
acceptsYAMLRegex
=
regexp
.
MustCompile
(
`(application/x-yaml)(?:,|$)`
)
maxParam
=
50
)
...
...
@@ -203,6 +204,10 @@ func (input *BeegoInput) AcceptsXML() bool {
func
(
input
*
BeegoInput
)
AcceptsJSON
()
bool
{
return
acceptsJSONRegex
.
MatchString
(
input
.
Header
(
"Accept"
))
}
// AcceptsYAML Checks if request accepts json response
func
(
input
*
BeegoInput
)
AcceptsYAML
()
bool
{
return
acceptsYAMLRegex
.
MatchString
(
input
.
Header
(
"Accept"
))
}
// IP returns request client ip.
// if in proxy, return first proxy id.
...
...
context/output.go
View file @
7c80bf6f
...
...
@@ -30,6 +30,7 @@ import (
"strconv"
"strings"
"time"
"gopkg.in/yaml.v2"
)
// BeegoOutput does work for sending response header.
...
...
@@ -202,6 +203,20 @@ func (output *BeegoOutput) JSON(data interface{}, hasIndent bool, encoding bool)
return
output
.
Body
(
content
)
}
// YAML writes yaml to response body.
func
(
output
*
BeegoOutput
)
YAML
(
data
interface
{})
error
{
output
.
Header
(
"Content-Type"
,
"application/application/x-yaml; charset=utf-8"
)
var
content
[]
byte
var
err
error
content
,
err
=
yaml
.
Marshal
(
data
)
if
err
!=
nil
{
http
.
Error
(
output
.
Context
.
ResponseWriter
,
err
.
Error
(),
http
.
StatusInternalServerError
)
return
err
}
return
output
.
Body
(
content
)
}
// JSONP writes jsonp to response body.
func
(
output
*
BeegoOutput
)
JSONP
(
data
interface
{},
hasIndent
bool
)
error
{
output
.
Header
(
"Content-Type"
,
"application/javascript; charset=utf-8"
)
...
...
controller.go
View file @
7c80bf6f
...
...
@@ -36,6 +36,7 @@ import (
const
(
applicationJSON
=
"application/json"
applicationXML
=
"application/xml"
applicationYAML
=
"application/x-yaml"
textXML
=
"text/xml"
)
...
...
@@ -347,6 +348,11 @@ func (c *Controller) ServeXML() {
c
.
Ctx
.
Output
.
XML
(
c
.
Data
[
"xml"
],
hasIndent
)
}
// ServeXML sends xml response.
func
(
c
*
Controller
)
ServeYAML
()
{
c
.
Ctx
.
Output
.
YAML
(
c
.
Data
[
"yaml"
])
}
// ServeFormatted serve Xml OR Json, depending on the value of the Accept header
func
(
c
*
Controller
)
ServeFormatted
()
{
accept
:=
c
.
Ctx
.
Input
.
Header
(
"Accept"
)
...
...
@@ -355,6 +361,8 @@ func (c *Controller) ServeFormatted() {
c
.
ServeJSON
()
case
applicationXML
,
textXML
:
c
.
ServeXML
()
case
applicationYAML
:
c
.
ServeYAML
()
default
:
c
.
ServeJSON
()
}
...
...
httplib/httplib.go
View file @
7c80bf6f
...
...
@@ -50,6 +50,7 @@ import (
"strings"
"sync"
"time"
"gopkg.in/yaml.v2"
)
var
defaultSetting
=
BeegoHTTPSettings
{
...
...
@@ -330,6 +331,19 @@ func (b *BeegoHTTPRequest) XMLBody(obj interface{}) (*BeegoHTTPRequest, error) {
}
return
b
,
nil
}
// YAMLBody adds request raw body encoding by YAML.
func
(
b
*
BeegoHTTPRequest
)
YAMLBody
(
obj
interface
{})
(
*
BeegoHTTPRequest
,
error
)
{
if
b
.
req
.
Body
==
nil
&&
obj
!=
nil
{
byts
,
err
:=
yaml
.
Marshal
(
obj
)
if
err
!=
nil
{
return
b
,
err
}
b
.
req
.
Body
=
ioutil
.
NopCloser
(
bytes
.
NewReader
(
byts
))
b
.
req
.
ContentLength
=
int64
(
len
(
byts
))
b
.
req
.
Header
.
Set
(
"Content-Type"
,
"application/x+yaml"
)
}
return
b
,
nil
}
// JSONBody adds request raw body encoding by JSON.
func
(
b
*
BeegoHTTPRequest
)
JSONBody
(
obj
interface
{})
(
*
BeegoHTTPRequest
,
error
)
{
if
b
.
req
.
Body
==
nil
&&
obj
!=
nil
{
...
...
@@ -429,12 +443,12 @@ func (b *BeegoHTTPRequest) DoRequest() (resp *http.Response, err error) {
}
b
.
buildURL
(
paramBody
)
url
,
err
:=
url
.
Parse
(
b
.
url
)
url
Parsed
,
err
:=
url
.
Parse
(
b
.
url
)
if
err
!=
nil
{
return
nil
,
err
}
b
.
req
.
URL
=
url
b
.
req
.
URL
=
url
Parsed
trans
:=
b
.
setting
.
Transport
...
...
@@ -579,6 +593,16 @@ func (b *BeegoHTTPRequest) ToXML(v interface{}) error {
return
xml
.
Unmarshal
(
data
,
v
)
}
// ToYAML returns the map that marshals from the body bytes as yaml in response .
// it calls Response inner.
func
(
b
*
BeegoHTTPRequest
)
ToYAML
(
v
interface
{})
error
{
data
,
err
:=
b
.
Bytes
()
if
err
!=
nil
{
return
err
}
return
yaml
.
Unmarshal
(
data
,
v
)
}
// Response executes request client gets response mannually.
func
(
b
*
BeegoHTTPRequest
)
Response
()
(
*
http
.
Response
,
error
)
{
return
b
.
getResponse
()
...
...
router.go
View file @
7c80bf6f
...
...
@@ -71,7 +71,7 @@ var (
// these beego.Controller's methods shouldn't reflect to AutoRouter
exceptMethod
=
[]
string
{
"Init"
,
"Prepare"
,
"Finish"
,
"Render"
,
"RenderString"
,
"RenderBytes"
,
"Redirect"
,
"Abort"
,
"StopRun"
,
"UrlFor"
,
"ServeJSON"
,
"ServeJSONP"
,
"ServeXML"
,
"Input"
,
"ParseForm"
,
"GetString"
,
"GetStrings"
,
"GetInt"
,
"GetBool"
,
"Serve
YAML"
,
"Serve
XML"
,
"Input"
,
"ParseForm"
,
"GetString"
,
"GetStrings"
,
"GetInt"
,
"GetBool"
,
"GetFloat"
,
"GetFile"
,
"SaveToFile"
,
"StartSession"
,
"SetSession"
,
"GetSession"
,
"DelSession"
,
"SessionRegenerateID"
,
"DestroySession"
,
"IsAjax"
,
"GetSecureCookie"
,
"SetSecureCookie"
,
"XsrfToken"
,
"CheckXsrfCookie"
,
"XsrfFormHtml"
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment