我今天才刚刚开始学习GoLang,我正在尝试构建一个简单的Rest API Web服务器。
这是我希望将每个请求发送到Web服务器的响应结构:
package main
type HttpResp struct{
Status int `json:"status"`
Description string `json:"description"`
Body string `json:"body"`
}
这是我的 articles.go 文件,该文件具有获取数据库中所有文章的功能:
package main
import (
"encoding/json"
"net/http"
"log"
)
type Article struct{
Id string `json:"id"`
Title string `json:"title"`
Body string `json:"body"`
Description string `json:"description"`
}
func AllArticles(w http.ResponseWriter, r *http.Request){
log.Print("/articles - GET")
db := connect()
defer db.Close()
var articles []Article
results, err := db.Query("SELECT * FROM Articles")
if err != nil{
log.Print(err)
return
}
for results.Next(){
var article Article
err = results.Scan(&article.Title, &article.Description, &article.Body, &article.Id)
if err != nil{
serr, _ := json.Marshal(err)
json.NewEncoder(w).Encode(HttpResp{Status: 500, Description: "Failed to retrieve all articles", Body: string(serr)})
}
articles = append(articles, article)
}
sarr, _ := json.Marshal(articles)
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(HttpResp{Status: 200, Body: string(sarr)})
}
我在这里面临的问题是响应是这样的:
{“状态”:200,“描述”:“”,“正文”:“ [{\” id \“:\” 1 \“,\”标题\“:\”第一\“,\”正文\“
:\“这是一个测试主体\”,\“说明\”:\“这是一个测试\”}]“}
我希望正文只是JSON,而不是字符串。我该如何实现?
没有必要将 尸体 与 尸体
分开编组HttpResp
。而是将Body
字段的类型更改为interface{}
,然后将该字段设置为与json字符串相对的具体类型的任何值,例如[]Article
,然后将resp编组一次。
type HttpResp struct{
Status int `json:"status"`
Description string `json:"description"`
Body interface{} `json:"body"`
}
其余的…
package main
import (
"encoding/json"
"net/http"
"log"
)
type Article struct{
Id string `json:"id"`
Title string `json:"title"`
Body string `json:"body"`
Description string `json:"description"`
}
func AllArticles(w http.ResponseWriter, r *http.Request){
log.Print("/articles - GET")
db := connect()
defer db.Close()
var articles []Article
results, err := db.Query("SELECT * FROM Articles")
if err != nil{
log.Print(err)
return
}
for results.Next(){
var article Article
err = results.Scan(&article.Title, &article.Description, &article.Body, &article.Id)
if err != nil{
serr, _ := json.Marshal(err)
json.NewEncoder(w).Encode(HttpResp{Status: 500, Description: "Failed to retrieve all articles", Body: string(serr)})
}
articles = append(articles, article)
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(HttpResp{Status: 200, Body: articles})
}
问题内容: 请考虑以下表格: 部 员工 编写查询以返回人员总数为4或更多的那些部门的雇员的empname和deptname列。记录应按姓氏的字母顺序返回 这是我的看法: 您将如何对此进行改进? 问题答案: 这比较短,而且执行速度可能也更快 从分组开始。您不需要内部查询中的COUNT。然后,联接两个表只是为了获得名称。 *之所以使用 *INNER JOIN, 是因为一旦计数完成,我们已经知道 员工存
问题内容: 当我对JScience Amount对象使用toString()时,会得到如下结果: 这并不可怕,但我真的希望它输出类似以下内容的内容: 是否有捷径可寻? 编辑: 为了明确起见,我希望找到一种解决方案,该解决方案适用于具有任何类型单位(或至少所有预定义单位)的任何金额,而不仅仅是“ mph”。 问题答案: 尽管它会丢弃错误和单位,但是您可以执行以下操作: 安慰: 附录: 我希望有一个能
问题内容: 当然,在Java中。我正在编写程序并在Windows环境下运行它,但是我需要以Unix格式完成输出(.csv)。任何简单的解决方案?谢谢! 问题答案: 注意:如评论中所述,下面给出的方法在JDK 9+中是无效的。 使用James H.的答案中的方法。 “ Unix格式”是指使用“ \ n”作为行终止符而不是“ \ r \ n”吗?在创建PrintWriter之前,只需设置系统属性即可。
我试图在java中使用Hibernate和TypedQuery。 我试图调用的方法有一个签名 我想像bellow一样调用它,但是用一个真实的实例替换null。 上面的代码经过编译,但显然带有空指针异常。 如果我对擦除的理解是正确的,那么只要我得到类对象的一个实例,这就行了,因为所有泛型类型信息在运行时都会丢失。 是否有任何方法,我可以得到一个类的实例,我可以分配给变量cls,使这个代码将工作?
问题内容: 在我的不和谐机器人中,我有2个命令来赋予和创建角色。它们工作得很好,但是如果角色名称包含空格,那么我有问题。它将第二个单词计入第二个参数,使命令产生错误。 理想情况下,我应该能够执行类似的操作,但会收到“无效用户”错误。我有什么办法可以在角色名称中支持空格?提前致谢! 问题答案: 您有几种选择: 使用角色转换器并要求提及角色: 要求角色用引号引起来: 切换两个参数的位置,以使转换后的用