【发布时间】:2020-04-08 12:02:21
【问题描述】:
我们要替换请求参数。
在代码中,状态是活动的。我使用方法 maskStatus() 来屏蔽状态。
this.mockMvc
.perform(RestDocumentationRequestBuilders.get("/helloworld")
.accept(MediaType.APPLICATION_JSON)
.param("status", "active"))
.andExpect(status().isOk())
.andDo(document("{class-name}/{method-name}",
Preprocessors.preprocessRequest(Preprocessors.prettyPrint(), Preprocessors.removeHeaders("Accept"),
maskStatus()),
RequestDocumentation.requestParameters(RequestDocumentation.parameterWithName("status").description("The status"))
));
在生成的 http-request.adoc 中,我们希望状态为“*status*”:
[source,http,options="nowrap"]
----
GET /missioncontrol/v1/helloworld?status=*status* HTTP/1.1
Host: localhost:8080
----
但实际结果是:
[source,http,options="nowrap"]
----
GET /missioncontrol/v1/helloworld?status=active&status=*status* HTTP/1.1
Host: localhost:8080
----
代码:
@RunWith(SpringRunner.class)
@WebAppConfiguration
@SpringBootTest(classes = Application.class)
public class TestControllerTest {
@Rule
public JUnitRestDocumentation restDocumentation = new JUnitRestDocumentation( "target/snippets");
@Autowired
private WebApplicationContext wac;
@Autowired
private FilterChainProxy springSecurityFilterChain;
protected MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac)
.apply(MockMvcRestDocumentation.documentationConfiguration(this.restDocumentation))
.addFilter(springSecurityFilterChain)
.build();
}
@Test
public void hellWorldTest() throws Exception {
this.mockMvc
.perform(RestDocumentationRequestBuilders.get("/helloworld")
.accept(MediaType.APPLICATION_JSON)
.param("status", "active"))
.andExpect(status().isOk())
.andDo(document("{class-name}/{method-name}",
Preprocessors.preprocessRequest(Preprocessors.prettyPrint(), Preprocessors.removeHeaders("Accept"),
maskStatus()),
RequestDocumentation.requestParameters(RequestDocumentation.parameterWithName("status").description("The status"))
));
}
private OperationPreprocessor maskStatus() {
return new StatusMaskingPreprocessor();
}
private static class StatusMaskingPreprocessor implements OperationPreprocessor {
@Override
public OperationRequest preprocess(OperationRequest request) {
Parameters parameters = new Parameters();
parameters.set("status", "*status*");
return new OperationRequestFactory().create(request.getUri(),
request.getMethod(), request.getContent(), request.getHeaders(),
parameters, request.getParts());
}
@Override
public OperationResponse preprocess(OperationResponse response) {
return response;
}
}
问题: 我们要替换状态。但它不起作用,它只是附加新的分配。为什么?
我尝试过的其他方法:
@Test
public void hellWorldTest() throws Exception {
this.mockMvc
.perform(RestDocumentationRequestBuilders.get("/helloworld")
.accept(MediaType.APPLICATION_JSON)
.param("status", "active"))
.andExpect(status().isOk())
.andDo(document("{class-name}/{method-name}",
Preprocessors.preprocessRequest(Preprocessors.prettyPrint(), Preprocessors.removeHeaders("Accept"),
Preprocessors.modifyParameters().remove("status").set("status", "*status*")),
RequestDocumentation.requestParameters(RequestDocumentation.parameterWithName("status").description("The status"))
));
}
结果仍然是“GET /helloworld?status=active&status=*status* HTTP/1.1”
有人知道如何替换请求参数吗?
提前致谢。
【问题讨论】:
标签: spring-restdocs