Browse Source

Updated: restlet function support JSON and RAW output.

develop
Mingcai SHEN 8 years ago
parent
commit
c2c9f4419d
1 changed files with 30 additions and 7 deletions
  1. +30
    -7
      restlet/restlet.go

+ 30
- 7
restlet/restlet.go View File

@ -58,7 +58,7 @@ func HashKey(s ...string) string {
return fmt.Sprintf("%x", bs)
}
func Restelet_Failure_Response(code uint, message string) (*RestletResult, error) {
func Failure_Response(code uint, message string) (*RestletResult, error) {
return &RestletResult{
Code: code,
Message: message,
@ -115,7 +115,6 @@ func MakeRestletHandler(h RestletHandler, predictor RequestPredictor, ctx_provid
log.Errorln("Read Body error:>", e)
}
}
if r, e := h.Handle(ctx, url_params, queries, post_data); nil != e {
response.Header().Set("Content-Type", "text/plain")
response.WriteHeader(501)
@ -125,17 +124,41 @@ func MakeRestletHandler(h RestletHandler, predictor RequestPredictor, ctx_provid
//if self.option.Generic.Debug {
// r.Debug = &restlet.DebugResult{Start:t1, Finish:time.Now().Unix()}
//}
if b, e := json.Marshal(r); nil != e {
//log.Debugf("MakeRestletHandler:> Result: %+v \n", r)
var output interface{}
var err error
var pbytes []byte
var ok bool
if r.DataOnly {
output = r.Data
}else{
output = r
}
if r.RawBytes {
err = nil
pbytes, ok = output.([]byte)
if !ok {
panic("Data not row bytes!")
}
}else{
r.ContentType = "application/json"
pbytes, err = json.Marshal(output)
}
if nil != err {
response.Header().Set("Content-Type", "text/plain")
response.WriteHeader(500)
response.Write([]byte(fmt.Sprintf("Failed:> %s", e)))
} else {
response.Header().Set("Content-Type", "application/json")
response.WriteHeader(int(r.Code / 100))
response.Write(b)
statusCode := int(r.Code / 100)
if statusCode / 100 < 1 || statusCode / 100 > 5 {
statusCode = 200
}
response.Header().Set("Content-Type", r.ContentType)
response.WriteHeader(statusCode)
response.Write(pbytes)
if nil != cache && MatchMethod(request.Method, cache.CacheMethods) {
//k := HashKey(request.Method, request.URL.RawPath)
ctx.Cache().Set(c_key, b, cache.Expires)
ctx.Cache().Set(c_key, pbytes, cache.Expires)
log.Debugln("Cached Content for:> ", c_key, request.Method, request.URL.String())
}
}

Loading…
Cancel
Save