説明なし
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

query_handler_json.go 844B

12345678910111213141516171819202122232425262728293031323334353637
  1. package myhandle
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "time"
  6. "git.x2erp.com/qdy/go-base/types"
  7. )
  8. // queryHandler - 最简单的版本
  9. func QueryHandlerJson[T any, F any](
  10. w http.ResponseWriter,
  11. r *http.Request,
  12. factory F,
  13. handlerFunc func(F, T) *types.QueryResult,
  14. ) {
  15. // 解析请求参数
  16. var req T
  17. if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
  18. // 如果解析失败,也返回 QueryResult 格式
  19. w.Header().Set("Content-Type", "application/json")
  20. json.NewEncoder(w).Encode(&types.QueryResult{
  21. Success: false,
  22. Error: "Invalid request body: " + err.Error(),
  23. Time: time.Now().Format(time.RFC3339),
  24. })
  25. return
  26. }
  27. // 执行业务逻辑
  28. result := handlerFunc(factory, req)
  29. // 设置头,写入结果
  30. w.Header().Set("Content-Type", "application/json")
  31. json.NewEncoder(w).Encode(result)
  32. }