Keine Beschreibung
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

query_handler_bytes.go 908B

1234567891011121314151617181920212223242526272829303132333435
  1. package myhandle
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "git.x2erp.com/qdy/go-base/ctx"
  6. )
  7. // 最简单的 queryHandler,只处理 []byte 返回
  8. func QueryHandlerBytes[T any, F any](
  9. w http.ResponseWriter,
  10. r *http.Request,
  11. factory F,
  12. handlerFunc func(F, T, *ctx.RequestContext) []byte,
  13. ) {
  14. // 解析请求参数
  15. var req T
  16. if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
  17. // 返回 CSV 格式的错误信息
  18. errorCSV := "error,Invalid request body\n"
  19. w.Header().Set("Content-Type", "text/csv")
  20. w.WriteHeader(http.StatusBadRequest)
  21. w.Write([]byte(errorCSV))
  22. return
  23. }
  24. // 调用业务逻辑函数
  25. csvData := handlerFunc(factory, req, ctx.GetContext(r))
  26. // 直接返回 CSV 数据(包含错误信息时也会被正确处理)
  27. w.Header().Set("Content-Type", "text/csv")
  28. w.Header().Set("Content-Disposition", "attachment; filename=query_result.csv")
  29. w.Write(csvData)
  30. }