当进行REST调用以触发Jenkins作业时,出现“400此页面需要提交表单”的错误信息。

26

我需要在我的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。我已经设置了Content Type头:

headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

将表单参数设置为映射(Map)。

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,我想将其存储到一个字符串中并解析以获取一些值。


那么你是如何解决这个问题的? - Sambatyon
1个回答

32

我也遇到了这个问题。最终,我发现如果你的任务有参数并且你调用了/build,这将导致400错误请求。即使所有参数都有默认值,你也必须调用/buildWithParameters


1
谢谢你,伙计!整个下午我都在抓狂!!! - Atif Rehman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接