spring boot에서 과제를 진행하던 와중에 pathVariable에 /가 포함된 값을 파라미터로 받았어야 했다.
하지만 /는 url 작성시에 구분자로 사용되기 때문에 원하는대로 작동이 안될것임을 짐작했었다.
Springboot에서는 기본적으로 /가 포함된 경우 다음과 같은 정책을 적용한다.
- Encoding된 Slash가 포함되었다 하더라도, 이를 Decode해서 변수 자체를 세부 Path로 구분해버린다.
- 중복된 Slash가 존재하면 이를 합쳐서 하나의 Slash로 만들어버린다.
spring boot 3.x 이상 버전에서의 해결법
@Component
public class EmbeddedTomcatServerCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
@Override
public void customize(TomcatServletWebServerFactory factory) {
factory.getTomcatConnectorCustomizers()
.add(connector -> connector.setEncodedSolidusHandling("decode"));
}
}
나머지는 해당 링크에서 참고하면 될듯 하다.