【问题标题】:Unable to send JSON to rest end point in spring boot appilcation无法在 Spring Boot 应用程序中将 JSON 发送到休息端点
【发布时间】:2016-05-06 09:54:57
【问题描述】:

我必须将 JSON 发送到使用 Spring Boot 构建的其余终端服务。我没有得到我做错了什么。这是代码

@RestController public class EmailWithTemplate 
{
    @RequestMapping(value="/create-template",method=RequestMethod.GET)
    void CreateTemplate(@RequestBody EmailTemplate emailtemplate)
    {
        System.out.println(emailtemplate.getName());
    } 
}

public class EmailTemplate 
{
    private String name;
    private String body;
    //private String[] values;

    public void setName(String name)
    {
        this.name=name;
    }
    public String getName()
    {
        return name;
    }

    public void setBody(String body)
    {
        this.body=body;
    }
    public String getBody()
    {
        return body;
    }
}

另外,我还在pom.xml 文件中添加了jackson 依赖项。

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.9.13</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.13</version>
    </dependency>

启动tomcat服务器后我点击:

localhost:8080/create-template/{"name":"Test", "body":"Test body"}

这显示在浏览器中:

白标错误页面

这个应用程序没有明确的 /error 映射,所以你看到 这是一个后备。

2016 年 1 月 29 日星期五 01:58:00 IST 出现意外错误(类型=Not 找到,状态=404)。没有可用的消息

【问题讨论】:

  • 你的 rest 调用不应该是 POST 方法吗?
  • 我也试过 POST 但结果是一样的
  • Rohan,请您发布实际调用您的服务的客户端代码吗?此外,查看您的请求/响应对的日志真的很有帮助。
  • 其实没有客户端代码。我自己在打开服务器后从浏览器调用服务。我在网络浏览器地址上输入那个 json。

标签: java json spring maven spring-boot


【解决方案1】:

基本上,您的客户端代码会在 URL localhost:8080/create-template/ 中附加 JSON {"name":"Test", "body":"Test body"}。因此,您调用的 URL 是 localhost:8080/create-template/{"name":"Test", "body":"Test body"} 服务器找不到,因为服务器只知道 localhost:8080/create-template/ 资源。这就是您收到 404 的原因。JSON 必须是请求正文的一部分,而不是请求 URL。

另外,您的服务器正在等待 HTTP GET 请求。 GET 请求不能包含正文。见:HTTP GET with request body

您需要使用 JSON 作为主体执行 HTTP POST 方法。

例如,您应该发送如下请求:

POST http://localhost:8080/create-template/ HTTP/1.0
Content-Type: application/json

{
    "name":"Test",
    "body":"Test body"
}

【讨论】:

  • 所以我确实需要一个调用该服务的客户端方法,而我不能直接从浏览器调用该服务?
  • 你可以使用任何一个。我使用 DHC for Chrome 来测试我的 JSON REST 请求。尝试将上述请求放在那里。
  • 是的,它在 DHC 上工作,但为什么不在浏览器网址上?答案是否正如你所说的服务器无法找到,因为服务器只知道 localhost:8080/create-template/
  • 您是从 DHC 发出 POST 请求还是 GET 请求?因为从浏览器本身,它只是隐式地执行 GET 请求。
  • POST 请求。其实GET和POST我都试过了,通过浏览器地址访问时都给出了相同的结果。
【解决方案2】:

您必须将 JSON 作为 POST 正文而不是 URI 路径传递。

POST /create-template HTTP/1.0
Content-type: application/json

{"name": "Test", ...}

例如,在 jquery 中,您必须调用:

$.ajax({
   type: "POST",
   url: "http://localhost:8080/create-template",
   data: {name: "Test", ...},
});

【讨论】:

  • 对不起,我没有得到你。你能再解释一下吗?
  • 将您的方法转换为 POST。根据您使用的客户端来点击方法,您应该可以选择发布消息正文并设置内容类型。请使用这些选项。对于邮递员,请关注此网址。 getpostman.com/docs/requests
猜你喜欢
  • 1970-01-01
  • 2019-03-13
  • 2016-09-08
  • 2016-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
相关资源
最近更新 更多