This commit is contained in:
@@ -1,9 +1,12 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
stdErrors "errors"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -197,6 +200,8 @@ func closeQueue(queueClient *queue.Client, appLogger *zap.Logger) {
|
|||||||
|
|
||||||
// createFiberApp 创建 Fiber 应用
|
// createFiberApp 创建 Fiber 应用
|
||||||
func createFiberApp(cfg *config.Config, appLogger *zap.Logger) *fiber.App {
|
func createFiberApp(cfg *config.Config, appLogger *zap.Logger) *fiber.App {
|
||||||
|
registerTimeParserCompat()
|
||||||
|
|
||||||
return fiber.New(fiber.Config{
|
return fiber.New(fiber.Config{
|
||||||
AppName: "君鸿卡管系统 v1.0.0",
|
AppName: "君鸿卡管系统 v1.0.0",
|
||||||
StrictRouting: true,
|
StrictRouting: true,
|
||||||
@@ -210,6 +215,60 @@ func createFiberApp(cfg *config.Config, appLogger *zap.Logger) *fiber.App {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// registerTimeParserCompat 注册时间参数解析兼容器
|
||||||
|
// 兼容格式:RFC3339、2006-01-02、2006-01-02 15:04:05、2006-01-02T15:04:05
|
||||||
|
func registerTimeParserCompat() {
|
||||||
|
fiber.SetParserDecoder(fiber.ParserConfig{
|
||||||
|
IgnoreUnknownKeys: true,
|
||||||
|
ZeroEmpty: true,
|
||||||
|
ParserType: []fiber.ParserType{
|
||||||
|
{
|
||||||
|
Customtype: time.Time{},
|
||||||
|
Converter: func(value string) reflect.Value {
|
||||||
|
parsedTime, err := parseFlexibleTime(value)
|
||||||
|
if err != nil {
|
||||||
|
return reflect.Value{}
|
||||||
|
}
|
||||||
|
return reflect.ValueOf(parsedTime)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// parseFlexibleTime 解析多种常见时间格式
|
||||||
|
func parseFlexibleTime(value string) (time.Time, error) {
|
||||||
|
trimmed := strings.TrimSpace(value)
|
||||||
|
if trimmed == "" {
|
||||||
|
return time.Time{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 优先支持带时区的标准时间格式。
|
||||||
|
if parsed, err := time.Parse(time.RFC3339, trimmed); err == nil {
|
||||||
|
return parsed, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 兼容无时区格式,按服务器本地时区解析。
|
||||||
|
layouts := []string{
|
||||||
|
"2006-01-02 15:04:05",
|
||||||
|
"2006-01-02T15:04:05",
|
||||||
|
"2006-01-02",
|
||||||
|
}
|
||||||
|
var parseErr error
|
||||||
|
for _, layout := range layouts {
|
||||||
|
if parsed, err := time.ParseInLocation(layout, trimmed, time.Local); err == nil {
|
||||||
|
return parsed, nil
|
||||||
|
} else {
|
||||||
|
parseErr = err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if parseErr == nil {
|
||||||
|
parseErr = stdErrors.New("时间格式不支持")
|
||||||
|
}
|
||||||
|
return time.Time{}, parseErr
|
||||||
|
}
|
||||||
|
|
||||||
// initMiddleware 注册中间件
|
// initMiddleware 注册中间件
|
||||||
func initMiddleware(app *fiber.App, cfg *config.Config, appLogger *zap.Logger) {
|
func initMiddleware(app *fiber.App, cfg *config.Config, appLogger *zap.Logger) {
|
||||||
// 1. Recover - 必须第一个,捕获所有 panic
|
// 1. Recover - 必须第一个,捕获所有 panic
|
||||||
|
|||||||
Reference in New Issue
Block a user