MockRestServiceServer 中是否有现成的 class 来抓取请求体用于日志等?
Is there a ready-made class to capture request body in MockRestServiceServer for logging etc.?
我会自己回答我的问题,但我对我的解决方案不满意,所以如果有现成的方便class/method做同样的事情,请告诉我。
问题陈述
我在单元测试中使用 Spring MockRestServiceServer 来模拟 REST 服务调用。我想快速访问来自模拟 REST 服务器的请求正文。通常用于记录或仅用于调试期间的评估。
使用上下文如下:
import org.springframework.test.web.client.MockRestServiceServer;
class MyTest {
@Test
void myTest() {
MockRestServiceServer mockServer = ...;
mockServer
.expect(MockRestRequestMatchers.method(HttpMethod.POST))
.andExpect(MockRestRequestMatchers.requestTo("http://mock.example.com/myservice"))
// The following method does not exist, it's what I'd like to have
.andCapture(body -> {
/* do something with the body */
log.info(body);
}) // the place for the Captor
.andRespond(MockRestResponseCreators.withSuccess("The mock response", MediaType.TEXT_PLAIN))
;
}
}
问题
是否有现成的 class/method 可以提供开箱即用的“andCapture(body -> {})
”功能?
到目前为止我最好的解决方案是:
.andExpect(request -> {
final String body = ((ByteArrayOutputStream) request.getBody()).toString(StandardCharsets.UTF_8);
/* do something with the body */
log.info(body);
})
不过,我希望可能存在一种直接捕获请求正文的便捷方法。
我会自己回答我的问题,但我对我的解决方案不满意,所以如果有现成的方便class/method做同样的事情,请告诉我。
问题陈述
我在单元测试中使用 Spring MockRestServiceServer 来模拟 REST 服务调用。我想快速访问来自模拟 REST 服务器的请求正文。通常用于记录或仅用于调试期间的评估。
使用上下文如下:
import org.springframework.test.web.client.MockRestServiceServer;
class MyTest {
@Test
void myTest() {
MockRestServiceServer mockServer = ...;
mockServer
.expect(MockRestRequestMatchers.method(HttpMethod.POST))
.andExpect(MockRestRequestMatchers.requestTo("http://mock.example.com/myservice"))
// The following method does not exist, it's what I'd like to have
.andCapture(body -> {
/* do something with the body */
log.info(body);
}) // the place for the Captor
.andRespond(MockRestResponseCreators.withSuccess("The mock response", MediaType.TEXT_PLAIN))
;
}
}
问题
是否有现成的 class/method 可以提供开箱即用的“andCapture(body -> {})
”功能?
到目前为止我最好的解决方案是:
.andExpect(request -> {
final String body = ((ByteArrayOutputStream) request.getBody()).toString(StandardCharsets.UTF_8);
/* do something with the body */
log.info(body);
})
不过,我希望可能存在一种直接捕获请求正文的便捷方法。