Kaynağa Gözat

when response is not success should return server error

Morlay 8 yıl önce
ebeveyn
işleme
8a97812e91
2 değiştirilmiş dosya ile 9 ekleme ve 1 silme
  1. 3 1
      sdk/errors/server_error.go
  2. 6 0
      sdk/responses/response.go

+ 3 - 1
sdk/errors/server_error.go

@@ -14,6 +14,8 @@
 
 package errors
 
+import "fmt"
+
 type ServerError struct {
 	httpStatus int
 	errorCode  string
@@ -41,7 +43,7 @@ func (err *ServerError) Message() string {
 }
 
 func (err *ServerError) Error() string {
-	return "SDK.ServerError"
+	return fmt.Sprintf("SDK.ServerError %s %s", err.errorCode, err.message)
 }
 
 func (err *ServerError) OriginError() error {

+ 6 - 0
sdk/responses/response.go

@@ -22,9 +22,11 @@ import (
 	"net/http"
 	"strconv"
 	"strings"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/errors"
 )
 
 type AcsResponse interface {
+	IsSuccess() bool
 	GetHttpStatus() int
 	GetHttpHeaders() map[string][]string
 	GetHttpContentString() string
@@ -38,6 +40,10 @@ func Unmarshal(response AcsResponse, httpResponse *http.Response, format string)
 	if err != nil {
 		return
 	}
+	if !response.IsSuccess() {
+		err = errors.NewServerError(response.GetHttpStatus(), response.GetOriginHttpResponse().Status, response.GetHttpContentString())
+		return
+	}
 	if strings.ToUpper(format) == "JSON" {
 		err = json.Unmarshal(response.GetHttpContentBytes(), response)
 	} else if strings.ToUpper(format) == "XML" {