Skip to content
middleware for go-json-rest to convert x-www-form-urlencoded data into json
Go
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
LICENSE
README.md
formjson.go
formjson_test.go

README.md

#go-json-rest-middleware-formjson Provides "x-www-form-urlencoded" to "json" conversion middleware for go-json-rest

Explanation

This package provides a Go-Json-Rest middleware useful for converting request data with the content type "application/x-www-form-urlencoded" to "application/json"

Note: Use BEFORE ContentTypeCheckerMiddleware in cases where x-www-form-urlencoded data must be handled

If "Content-Type" Header set to "x-www-form-urlencoded":

  • Changes header "Content-Type" from "application/x-www-form-urlencoded" to "application/json"
  • Converts body from var1=val1&var2=val2 to {"var1":"val1","var2":"val2"}

Installation

go get github.com/boonep/go-json-rest-middleware-formjson

Usage

Example 1

Check for Content-Type application/x-www-form-urlencoded on all routes, and convert to application/json

api.Use([]rest.Middleware{
	&formjson.Middleware{},
	&rest.ContentTypeCheckerMiddleware{},
}...)

Example 2

Only check specific path and method. This will be the most likely use case. You should use json content wherever possible, but if you MUST interact with form data on a specific endpoint, you can handle it this way.

formJsonMiddleware := &formJson.MiddleWare{}

api.Use(&rest.IfMiddleware{
	Condition: func(request *rest.Request) bool {
		return request.URL.Path == "/form-data" && request.Method == "POST"
	},
	IfTrue: &formjson.Middleware{},
})

api.Use([]rest.Middleware{
	&rest.ContentTypeCheckerMiddleware{},
}...)

Above will only convert form content on a POST request to the "/form-data" path

Notes

This middleware performs basic functionality for our specific use case (interact with a 3rd party SAAS solution that could not provide JSON content). Feel free to improve and submit pull requests. Thanks!

You can’t perform that action at this time.