Я хотел бы выяснить, возможно ли для HTTP-клиента POST отправить конкретный объект JSON и ответ сервера с другим объектом JSON в Go.Например, клиент отправляет объект JSON
тело запроса
{
"nfNssaiAvailabilityUri": "string",
"taiList": [
{
"plmnId": {
"mcc": "string",
"mnc": "string"
},
"tac": "string"
}
],
"expiry": "2019-04-01T10:41:54.344Z"
}
тело ответа в виде
{
"subscriptionId": "string",
"expiry": "2019-04-01T10:41:54.363Z",
"authorizedNssaiAvailabilityData": [
{
"tai": {
"plmnId": {
"mcc": "string",
"mnc": "string"
},
"tac": "string"
},
"supportedSnssaiList": [
{
"sst": 0,
"sd": "string"
}
],
"restrictedSnssaiList": [
{
"homePlmnId": {
"mcc": "string",
"mnc": "string"
},
"sNssaiList": [
{
"sst": 0,
"sd": "string"
}
]
}
]
}
]
}
Как видите, тело запроса JSON отличается отответ.У меня есть структуры для обоих JSON, и в настоящее время я могу только POST с телом запроса и получить то же тело, что и ответ.Я ожидаю, что смогу получить объект JSON, указанный в ответе выше.
У меня есть:
type NssfEventSubscriptionCreateData struct {
NfNssaiAvailabilityUri string `json:"nfNssaiAvailabilityUri"`
TaiList []Tai `json:"taiList,omitempty"`
...
}
type NssfEventSubscriptionCreatedData struct {
SubscriptionId string `json:"subscriptionId"`
Expiry time.Time `json:"expiry,omitempty"`
....
}
func (m *SliceDataAccess) InsertNssaiSubscriptionInfo(subdata NssfEventSubscriptionCreateData) error {
err := db.C(COLLECTION).Insert(subdata)
if err != nil {
return err
}
return nil
}
func NSSAIAvailabilityPost(w http.ResponseWriter, r *http.Request) {
if r.Header.Get("Accept") != "application/json" {
WriteError(w, ErrNotAcceptable)
return
}
if r.Method == "POST" {
var reqsubData NssfEventSubscriptionCreateData
err := json.NewDecoder(r.Body).Decode(&reqsubData)
if err != nil {
respondWithError(w, http.StatusBadRequest, "Object body not well decoded")
return
}
//reqsubData.ID = bson.NewObjectId()
if err := da.InsertNssaiSubscriptionInfo(reqsubData); err != nil {
respondWithError(w, http.StatusInternalServerError, err.Error())
} else {
scheme := "http"
if r.URL.Scheme != "" {
scheme = r.URL.Scheme
}
w.Header().Set("Location", scheme+"://"+r.Host+r.URL.Path)
w.Header().Set("Response-Code", "201")
w.Header().Set("Response-Desc", "Success")
respondWithJson(w, http.StatusCreated, reqsubData)
}
}
}
Функция NSSAIAvailabilityPost
отвечает * JSON-объектом NssfEventSubscriptionCreateData
типа структуры, но я бы хотел иметь возможность ответитьс NssfEventSubscriptionCreatedData
объектом типа JSON.