카테고리 없음

매개 변수의 + 문자를 공백으로 대체하는 Spring Controller

기록만이살길 2021. 2. 23. 13:04
반응형

매개 변수의 + 문자를 공백으로 대체하는 Spring Controller

1. 질문(문제점):

2 개의 매개 변수를받는 컨트롤러가 있습니다.

@PostMapping(value = "/myEndPoint")
public ResponseEntity<StreamingResponseBody> process(final InputStream data,
                                                               @RequestParam final String param1,
                                                               @RequestParam final String base64Param)  {
    return ok().body(doSomething(base64Param.getBytes(), param1, data));
}

base64Param String 매개 변수에는 +문자 가 포함 되지만 물론 Spring 컨트롤러는이를 공백으로 대체합니다.

이 문제를 해결하고 컨트롤러에게 +캐릭터 를 내버려 두라고 지시하는 방법을 알고 있습니까?

업데이트-나는 시도했다

UriComponentsBuilder builder = fromUriString(format("http://localhost:%s/%s", serverPort, "/myEndPoint"))
            .queryParam("param1", param1)
            .queryParam("base64Param", Base64.getUrlEncoder().encodeToString(base64ParamValueWithPluses.getBytes()));

하지만 컨트롤러에서 base64Param 매개 변수를 다음과 같이 디코딩해야합니다.

String decodedBaseParam64 = Base64.getUrlDecoder().decode(encodeBaseParam64);

이것을 인코딩하는 방법이 +있습니까? 그래서 Spring이 보존 된 문자로 자동으로 디코딩 할 것 입니까?

2. 해결방안:

URI uri = fromUriString(format("http://localhost:%s/%s", serverPort, "/myEndPoint"))
            .queryParam("param1", param1)
            .queryParam("base64Param", "{base64Param}")
            .build(base64Param);

출처-https: //github.com/spring-projects/spring-framework/issues/21577

65831140
반응형