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