在进行 rest 调用以触发 Jenkins 作业时获取“400 此页面需要表单提交”

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

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)

我正在使用 RestTemplate 来调用 api。我设置了内容类型标题:

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);

最后将呼叫为:

 ResponseEntity<String> response = 
    restTemplate.exchange(url,HttpMethod.POST, request, String.class);

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


答案 1

我也有这个问题。最后,我发现,如果你的作业有参数,你调用,这会导致错误的请求错误。即使所有参数都具有默认值,也必须调用。/build400/buildWithParameters


答案 2

推荐