public class UriDecodingPreprocessor implements OperationPreprocessor {
@Override
public OperationRequest preprocess(OperationRequest request) {
String decodeUri = URLDecoder.decode(request.getUri().toString(), StandardCharsets.UTF_8);
return new OperationRequestFactory().create(
URI.create(decodeUri),
request.getMethod(),
request.getContent(),
request.getHeaders(),
request.getParameters(), // <- 2.x
request.getParts(),
request.getCookies()
);
}
@Override
public OperationResponse preprocess(OperationResponse response) {
return null;
}
}
public class UriDecodingPreprocessor implements OperationPreprocessor {
@Override
public OperationRequest preprocess(OperationRequest request) {
String decodeUri = URLDecoder.decode(request.getUri().toString(), StandardCharsets.UTF_8);
return new OperationRequestFactory().create(
URI.create(decodeUri),
request.getMethod(),
request.getContent(),
request.getHeaders(),
request.getParts(),
request.getCookies()
);
}
@Override
public OperationResponse preprocess(OperationResponse response) {
return null;
}
}
이 코드는 OperationRequest에서 URI를 디코딩하여 새로 생성하고, 나머지 요청 정보를 그대로 유지합니다.
OperationRequestPreprocessor와 RestDocumentationResultHandler를 설정하여 문서화 요청을 전처리할 수 있습니다.
protected OperationRequestPreprocessor getDocumentRequest() {
return preprocessRequest(
prettyPrint(),
new UriDecodingPreprocessor()
;
}
protected RestDocumentationResultHandler createDocumentation(Snippet... snippets) {
return document(
"{class-name}/{method-name}",
getDocumentRequest(),
getDocumentResponse(),
snippets
);
}
getDocumentRequest() 메서드는 UriDecodingPreprocessor를 사용하여 요청을 전처리합니다. createDocumentation() 메서드는 문서화 핸들러를 생성하여 각 테스트에서 사용됩니다.