使用Spring Boot

时间:2017-10-13 20:46:08

标签: java spring spring-mvc gitlab webhooks

我想通过spring boot rest controller接收GitLab webhook消息,但我遇到了webhook消息的空POST主体问题。

我的测试RestController非常简单:

@SpringBootApplication
@RestController
@RequestMapping("/gitlab/project")
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @PostMapping("/ok")
    public String working() {
        return "ok";
    }

    @PostMapping("/fails0")
    public String fails(@RequestBody String message) {
        return "never reaches this line";
    }

    @PostMapping("/fails1")
    public String fails(@RequestBody JsonNode message) {
        return "never reaches this line";
    }
}

当我在root logger上启用TRACE日志记录级别时,来自GitLab的传入请求如下所示:

[POST /gitlab/project/fails0 HTTP/1.1
Content-Type: application/json
X-Gitlab-Event: Push Hook
Connection: close
Host: 128.71.128.109:8080
Content-Length: 2065

]

3秒后超时GitLab失败测试消息,异常:

Hook execution failed: Net::ReadTimeout

经过更长的超时后,Spring因此异常而失败:

org.springframework.http.converter.HttpMessageNotReadableException: I/O      error while reading input message; nested exception is java.net.SocketTimeoutException

如果我没有尝试接收POST有效负载,请求和响应会正确执行,但当然,这不是我想要的。

有人能告诉我问题在哪里吗?

1 个答案:

答案 0 :(得分:0)

代码正确。问题可能出在网络上。如果使用泊坞窗,请不要使用localhost:8080。使用本地计算机或dns的IP。