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"`
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?