2014-12-24 41 views
3

我想在golang站點中有一個簡單的REST API服務器,它服務於客戶端請求的同一日期的HTML,JSON或XML格式。我無法弄清楚。我希望我沒有做一些愚蠢的事情。如何在golang和martini中動態呈現爲HTML/JSON/XML?

代碼:

package main 

import (
    "github.com/go-martini/martini" 
    "github.com/martini-contrib/render" 
) 

type Ticket struct { 
    Number  int `json:"number"` 
    Description string `json:"description"` 
    State  string `json:"state"` 
} 

func dummyStatus() Ticket { 

    ticket := Ticket{ 
     Number:  2345, 
     Description: "A dummy customer ticket", 
     State:  "resolved", 
    } 
    return ticket 
} 

// http://localhost:3000/status/id:1 
func ReadStatus(r render.Render, params martini.Params) Ticket { 

    // read from DB 
    return dummyStatus() 
} 

func WriteStatus(params martini.Params) Ticket { 

    // write to DB 
    return dummyStatus() 
} 

func main() { 

    m := martini.Classic() 
    m.Use(render.Renderer()) 

    m.Group("/status", func(r martini.Router) { 
     r.Get("/:id", ReadStatus) 
     r.Post("/:id", WriteStatus) 
    }) 

    m.Run() 

} 

結果: 我請求JSON,我只是得到一個字符串

$ curl -i -H "Accept: application/json" -H "Content-Type:application/json" -X GET http://localhost:3000/status/id:12345 
HTTP/1.1 200 OK 
Date: Wed, 24 Dec 2014 20:01:32 GMT 
Content-Length: 19 
Content-Type: text/plain; charset=utf-8 

<main.Ticket Value> 

回答

1

隨着一些試驗和錯誤,我想通了這一點,但是,我仍然在努力使其與路由組一起工作。如果我知道了,我會更新這個答案。希望這可以幫助。

package main 

import (
    "github.com/go-martini/martini" 
    "github.com/martini-contrib/render" 
) 

type Ticket struct { 
    Number  int `json:"number"` 
    Description string `json:"description"` 
    State  string `json:"state"` 
} 

func ReadStatus(p martini.Params) Ticket { 

    ticket := Ticket{ 
     Number:  645, 
     Description: "A dummy customer ticket " + p["id"], 
     State:  "resolved", 
    } 
    return ticket 
} 

func main() { 

    m := martini.Classic() 
    m.Use(render.Renderer()) 

    m.Get("/status/:id", func(r render.Render, params martini.Params) { r.JSON(200, ReadStatus(params)) }) 

    m.Run() 

} 
+0

哦,我忘了提及我對這個代碼的第二個限制......它不會根據請求動態更改格式。現在硬編碼的JSON響應。 :-( – FlowRaja

+0

我不得不執行一個類似的任務,默認情況下輸出是JSON,然後是XML。我這樣做只是爲了執行一個針對我的數據的方法的第二路由,以將其呈現爲XML並且那麼r.Data(200,[] byte(xmlstring)) – shat