我使用ClientHttpRequestInterceptor报告RestTemplate的请求输出和响应。如果出现异常,我需要记录响应,比如模板是否试图用错误的类取消对响应的处理。
这就是拦截器的启用方式:
@Bean
public RestTemplate restTemplate(ReportingConfiguration reportingConfiguration) {
return new RestTemplateBuilder()
.interceptors(new RestTemplateInterceptor())
.build();
}
这里唯一接受的接口是ClientHttpRequestInterceptor。拦截器看起来像:
@Override
public ClientHttpResponse intercept(HttpRequest req, byte[] body, ClientHttpRequestExecution execution) throws IOException {
...
ClientHttpResponse response = null;
try {
response = execution.execute(request, body);
} catch (Exception e) {
System.out.println("I need to get the response here");
}
...
我知道这门课不可能得到回应,你能给出一个替代的解决方案吗?
这是异常的一个例子:(请不要解释如何摆脱这个异常,我知道为什么我会得到这个,我只是想记录有效负载以防发生这种情况)
<代码>由:com引起。fasterxml。杰克逊。数据绑定。exc.UnrecognizedPropertyException:未识别字段“items”(class com.exapmle.group.web.beans.Response),未在[源:(ByteArrayInputStream);行:1,列:11](通过com的引用链:com.exapmle.group.web.beans.Response[“items”])标记为可忽略(3个已知属性:“text”,“status”,“set cookies”])。fasterxml。杰克逊。数据绑定。exc.UnrecognedPropertyException。来自com上的(UnrecognizedPropertyException.java:61)。fasterxml。杰克逊。数据绑定。反序列化上下文。com上的handleUnknownProperty(反序列化上下文。java:823)。fasterxml。杰克逊。数据绑定。德塞。std.StdDeserializer。com上的handleUnknownProperty(StdDeserializer.java:1153)。fasterxml。杰克逊。数据绑定。德塞。BeanDeserializerBase。com上的handleUnknownProperty(beandereserializerbase.java:1589)。fasterxml。杰克逊。数据绑定。德塞。BeanDeserializerBase。handleUnknownVanilla(beandereserializerbase.java:1567)位于com。fasterxml。杰克逊。数据绑定。德塞。BeanDeserializer。vanillaDeserialize(BeanDeserializer.java:294)
这应该可以:
ClientHttpResponse response = null;
try {
response = execution.execute(request, body);
} catch (Exception e) {
System.out.println("I need to get the response here", e.getMessage());
}
这是一个老问题,如果有人在看,我仍然会回答。如果API错误使用超文本传输协议代码(如500),我能够获得以下配置的响应。
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setConnectTimeout(5000);
factory.setReadTimeout(5000);
RestTemplate restTemplate = new RestTemplate(new BufferingClientHttpRequestFactory(factory));
restTemplate.setInterceptors(Collections.singletonList(new CustomLoggingRequestInterceptor()));
return restTemplate;
}
现在是日志拦截器。
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
traceRequest(request, body);
ClientHttpResponse response = execution.execute(request, body);
traceResponse(response);
return response;
}
private void traceResponse(ClientHttpResponse response) throws IOException {
StringBuilder inputStringBuilder = new StringBuilder();
inputStringBuilder.append(new String(getResponseBody(response), StandardCharsets.UTF_8));
log.error(inputStringBuilder.toString());
}
protected byte[] getResponseBody(ClientHttpResponse response) {
try {
return FileCopyUtils.copyToByteArray(response.getBody());
} catch (IOException ex) {
// ignore
}
return new byte[0];
}
1.【强制】应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J中的API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。 import org.slf4j.Logger; import org.slf4j.LoggerFactory; private static final Logger logger = LoggerFactory
问题内容: 当我的程序运行引发异常的行时,是否可以启动IPython Shell或提示? 我对引发异常的上下文,变量,作用域(和子作用域)最感兴趣。类似于Visual Studio的调试,当引发异常但未被任何人捕获时,Visual Studio将停止并为我提供调用堆栈和每个级别存在的变量。 您是否认为有办法使用IPython获得类似的东西? 编辑:启动IPython时,该选项似乎并没有达到我想要的
1.【强制】不要捕获Java类库中定义的继承自RuntimeException的运行时异常类,如:IndexOutOfBoundsException / NullPointerException,这类异常由程序员预检查来规避,保证程序健壮性。 正例:if(obj != null) {...} 反例:try { obj.method() } catch(NullPointerException e)
我试图用一个网络客户端来替换现有的客户机代码。因此,大多数调用都需要阻塞,这样应用程序的主要部分就不需要更改。当谈到错误处理时,这会带来一些问题。必须涵盖以下几种情况: 在成功的情况下,响应包含A类型的JSON对象 在错误情况下(HTTP状态4xx或5xx)响应可能包含B类型的JSON对象 在某些具有响应状态404的请求上,我需要返回一个与成功响应类型匹配的空 为了产生正确的错误(
你好,我正在学习OOP,通过编写一个虚拟的库管理项目在Java。 在serachBook()中,如果在ArrayList中找到book,则返回book对象,如果未找到,则抛出自定义异常BookNotFound。 问题1:它应该只返回null并在调用代码时检查返回值是否为null,还是抛出自定义异常BookNotFound。 目前我认为BookNotFinder是合适的,并且目前正在这样做。然而,我
问题内容: 在Java中,我们使用try catch块处理异常。我知道我可以像下面这样编写一个try catch块来捕获方法中抛出的任何异常。 但是Java中有什么方法可以让我在发生异常时获取一种称为的特定方法,而不是像上面的方法那样编写一个包罗万象的方法? 具体来说,当抛出异常(我的应用程序逻辑未处理)时,我想在Swing应用程序中显示一条用户友好的消息。 谢谢。 问题答案: 默认情况下,JVM