Spring Rest Docs URI 파라미터 한글 처리

조제·2024년 7월 23일
0

restdocs 2.x

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;
    }

}

restdocs 3.0

  • OperationRequest 클래스의 getParameters() 메서드가 제거되었습니다.
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() 메서드는 문서화 핸들러를 생성하여 각 테스트에서 사용됩니다.

profile
조제

0개의 댓글