duancai1904 2019-05-07 13:07
浏览 147

请求正文日期解析问题

I have a strange issue. I'm using echo package for routing. While I'm decoding json to struct I'm getting error parsing time \"\"2019-01-02\"\" as \"\"2006-01-02T15:04:05Z07:00\"\": cannot parse \"\"\" as \"T\""

my structs

VendorAgreement struct {
    ID                   primitive.ObjectID   `json:"id" bson:"_id"`
    StartDate            time.Time            `json:"start_date,date" bson:"start_date"`
    EndDate              time.Time            `json:"end_date,date" bson:"end_date"`
    CommissionPercentage float32              `json:"commission_percentage" bson:"commission_percentage"`
    Status               int                  `json:"status" bson:"status"`
    CreatedDate          time.Time            `json:"created_date" bson:"created_date"`
    Media                VendorAgreementMedia `json:"media" bson:"media"`
}

VendorAgreementMedia struct {
    MediaId     primitive.ObjectID `json:"mediaId" bson:"_id"`
    FileName    string             `json:"file_name" bson:"file_name"`
    SourcePath  string             `json:"source_path" bson:"source_path"`
    CreatedDate time.Time          `json:"created_date" bson:"created_date"`
}

My decoding step

var agreement VendorAgreement
err = json.NewDecoder(c.Request().Body).Decode(&agreement)

request body

 {
    "start_date":"2019-01-02",
    "end_date":"2020-05-06",
    "commission_percentage":10,
    "media":{
        "mediaId":"5cd1644cc57849f0761632b5"
    }
}
  • 写回答

2条回答 默认 最新

  • dongluan5740 2019-05-07 15:38
    关注

    You need to have a custom time type in order to unmarshal custom time format:

    type Datetime struct {
        time.Time
    }
    
    func (t *Datetime) UnmarshalJSON(input []byte) error {
        strInput := strings.Trim(string(input), `"`)
        newTime, err := time.Parse("2006-01-02", strInput)
        if err != nil {
            return err
        }
    
        t.Time = newTime
        return nil
    }
    
    VendorAgreement struct {
        ID                   primitive.ObjectID   `json:"id" bson:"_id"`
        StartDate            Datetime             `json:"start_date,date" bson:"start_date"`
        EndDate              Datetime             `json:"end_date,date" bson:"end_date"`
        CommissionPercentage float32              `json:"commission_percentage" bson:"commission_percentage"`
        Status               int                  `json:"status" bson:"status"`
        CreatedDate          Datetime             `json:"created_date" bson:"created_date"`
        Media                VendorAgreementMedia `json:"media" bson:"media"`
    }
    
    VendorAgreementMedia struct {
        MediaId     primitive.ObjectID `json:"mediaId" bson:"_id"`
        FileName    string             `json:"file_name" bson:"file_name"`
        SourcePath  string             `json:"source_path" bson:"source_path"`
        CreatedDate Datetime           `json:"created_date" bson:"created_date"`
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)