学习micro过程中,请求api返回失败 500 和 400

weixin_38081987 2019-09-20 09:27:07
在使用micro的时候,使用给的例子greeter,服务启动后,再使用http访问发送请求,报错的

请求无参数返回报错
```
curl -XPOST -H 'Content-Type: application/json' -d '{}' http://localhost:8080/greeter/say/hello
{"id":"go.micro.api.greeter","code":400,"detail":"Name cannot be blank","status":"Bad Request"}
```

请求有参数返回报错
```
curl -XPOST -H 'Content-Type: application/json' -d '{"name": "John"}' http://localhost:8080/greeter/say/hello
{"id":"go.micro.api","code":500,"detail":"error during request: unknown field \"name\" in go_micro_api.Request","status":"Internal Server Error"}
```

网上找了很多,没有找到答
小白求解答

开启的服务


greeter.api源码

```
package main

import (
"encoding/json"
"log"
"strings"

hello "github.com/micro/examples/greeter/srv/proto/hello"
"github.com/micro/go-micro"
"github.com/micro/go-micro/errors"
api "github.com/micro/micro/api/proto"
"context"
)
type Say struct {
Client hello.SayService
}
func (s *Say) Hello(ctx context.Context, req *api.Request, rsp *api.Response) error {
log.Print("Received Say.Hello API request")
name, ok := req.Get["name"]
if !ok || len(name.Values) == 0 {
return errors.BadRequest("go.micro.api.greeter", "Name cannot be blank")
}

response, err := s.Client.Hello(ctx, &hello.Request{
Name: strings.Join(name.Values, " "),
})
if err != nil {
return err
}

rsp.StatusCode = 200
b, _ := json.Marshal(map[string]string{
"message": response.Msg,
})
rsp.Body = string(b)
return nil
}

func main() {
service := micro.NewService(
micro.Name("go.micro.api.greeter"),
)

// parse command line flags
service.Init()

service.Server().Handle(
service.Server().NewHandler(
&Say{Client: hello.NewSayService("go.micro.srv.greeter", service.Client())},
),
)

if err := service.Run(); err != nil {
log.Fatal(err)
}
}
```
...全文
34 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧