在进行休息呼叫以触发Jenkins Job时获取“ 400该页面需要表单提交”

时间:2019-04-05 10:21:36

标签: java spring jenkins resttemplate rest-client

我需要从我的Java代码中触发一个Jenkins作业。JenkinsAPI需要一个application / x-www-form-urlencoded Content-Type,并且我能够从Postman Rest Client中触发该作业(使用Basic AUTH)。但是,当我尝试从Java代码中获取相同信息时,却遇到此异常-HttpClientErrorException:400此页面需要表单提交:

WebUI.authenticate("url", "name", "password", 10, , FailureHandling.OPTIONAL)

我正在使用RestTemplate调用api。我已经设置了Content Type标头:

Exception while triggerring jenkins {} 400 This page expects a form submission
org.springframework.web.client.HttpClientErrorException: 400 This page expects a form submission
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:108)
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:708)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:661)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:621)
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:539)

并在地图中设置表单参数

headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

,请求为:

MultiValueMap<String, String> map = new 
LinkedMultiValueMap<String, String>();
map.add("name", "value");
map.add("field2,"value");
map.add("json","a json string");

最终拨打电话为:

HttpEntity<MultiValueMap<String, String>> request = new 
HttpEntity<MultiValueMap<String, String>>(map, headers);

要注意的一件事是预期的响应是text / html,我想将其存储在字符串中并进行解析以获取一些值。

1 个答案:

答案 0 :(得分:8)

我也有这个问题。最后,我发现如果你的作业有参数并且你调用 /build,这会导致 400 bad request 错误。即使所有参数都有默认值,您也必须调用 /buildWithParameters