RestTemplate restTemplate = new RestTemplate();
// Added this requestFactory to make response object readable more than once.
ClientHttpRequestFactory requestFactory =
new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory());
restTemplate.setRequestFactory(requestFactory);
restTemplate.getInterceptors().add(new RequestLoggingInterceptor(vCloudRequest.getAction(),httpHeaders));
restTemplate.setErrorHandler(new RequestErrorHandler());
return restTemplate;
我怎样才能解决这个问题?
org.springframework.web.client.resourceAccessException:对“https://example.com/api/sessions”的POST请求的I/O错误:服务器返回HTTP响应代码:401(URL:https://example.com/api/sessions);嵌套异常是java.io.ioException:服务器返回的HTTP响应代码:401用于URL:https://example.com.11/api/sessions
这是拦截器的相关部分。
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
ClientHttpResponse response = execution.execute(request, body);
String requestString = new String(body);
// Calling this method because when we make a POST or PUT request and get an error
// response.getBody() throws IOException. But if we call response.getStatusCode() it works fine.
// I don't know the reason.
// I asked a question on stackoverflow
// https://stackoverflow.com/questions/47429978/resttemplate-response-getbody-throws-exception-on-4-and-5-errors-for-put-and
response.getStatusCode();
String responseString = new String(ByteStreams.toByteArray(response.getBody()), Charset.forName("UTF-8"));
...
}
这是自定义错误处理程序
公共类RequestErrorHandler实现ResponseErrorHandler{
@Override
public boolean hasError(ClientHttpResponse response) throws IOException {
if (!response.getStatusCode().is2xxSuccessful()) {
return true;
}
return false;
}
@Override
public void handleError(ClientHttpResponse response) throws IOException {
JAXBElement<ErrorType> root = null;
try {
JAXBContext jaxbContext = JAXBContext.newInstance(ErrorType.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
root = jaxbUnmarshaller.unmarshal(new StreamSource(
response.getBody()), ErrorType.class);
} catch (JAXBException e) {
throw new IOException("XML converting error. Cannot convert response to ErrorType");
}
ErrorType error = root.getValue();
throw new VcloudException(error);
}
}
使用HttpComponentSclientHttpPrequestFactory而不是SimpleClientHttpPrequestFactory。
还将依赖项添加到'org.apache.httpcomponents:HttpClient。
当状态为401时,HttpComponentSclientHttpPrequestFactory ccan读取正文。
问题内容: 我正在使用Java访问HTTPS站点,该站点以XML格式返回显示内容。我在URL本身中传递了登录凭据。这是代码片段: 我正在程序中创建一个不验证签名/未签名证书的信任管理器。但是,在运行上面的程序时,出现错误服务器返回HTTP响应代码:401表示URL:https:// Administrator:Password @ localhost:8443 / abcd 我可以在浏览器中使用相
问题内容: 考虑以下Java源代码: 该是。 为什么该语句有时会抛出? 谢谢。 问题答案: 线程安全 如果您的代码是多线程的,则有可能。例如: 如果在语句执行之后(但在循环之前)立即将另一个线程设置为,则您将获得一个。通过使用访问器(与延迟初始化结合使用)可以避免这种情况。 另外,如其他人所提到的,如果可能,请避免使用有利于泛型的此类循环构造。有关详细信息,请参见其他答案。 配件提供保护 如果始终
在我的工作场所,我们使用放心2.9发送RestAPI请求,我得到了一个包含响应正文和状态代码的有效输出,即使状态代码是500,402。 但是唯一不起作用的情况是错误303。请参阅其他,我得到了方法抛出org.apache.http.client.ClientProtocolException异常,我无法以这种方式解析信息,所有其他状态代码都返回状态代码和正文,只有303抛出异常。API不是问题,因
问题内容: 我正在尝试从服务器中获取数据。有时我的代码由于导致失败。这是为什么?这个问题是什么原因造成的? 问题答案: 如果在DNS服务器中发生了打cup,则可能会发生这种情况。除了使DNS服务器更强大或寻找另一台服务器之外,您还可以使用完整的IP地址代替主机名。这样,就无需根据主机名查找IP地址。但是,我宁愿解决DNS问题,也更喜欢DNS,因为IP地址可能会不时更改。
我正在jMeter中执行负载测试,其中有两个线程组,每个线程组都有50个用户,上升周期为60秒。使用Blazemeter,我记录了一个填写和提交表格的会话,然后稍微修改了一下。其中一组是使用POST方法登录,然后提交表单,另一组是匿名用户填写的。当我运行测试时,我遇到了错误: 响应代码:非HTTP响应代码:org.apache.HTTP。ConnectionClosedException响应消息: