직면하고있는 문제 는 점 (.) 뒤 의 URI 의 마지막 부분을 .json 또는 .xml과 같은 파일 확장자 로 해석하는 스프링 때문 입니다. 따라서 스프링이 경로 변수를 해결하려고 시도하면 URI가 끝날 때 점 (.)을 만나면 나머지 데이터가 잘립니다.
참고 : 또한 URI 끝에 경로 변수를 유지하는 경우에만 발생합니다.
예를 들어 uri를 고려 하십시오 : https : //localhost/example/gallery.df/link.ar
@RestController
public class CustomController {
@GetMapping("/example/{firstValue}/{secondValue}")
public void example(@PathVariable("firstValue") String firstValue,
@PathVariable("secondValue") String secondValue) {
// ...
}
}
위의 url firstValue = "gallery.df"및 secondValue = "link"에서. 다음의 마지막 비트입니다. 경로 변수가 해석 될 때 잘립니다.
따라서이를 방지하기 위해 가능한 두 가지 방법이 있습니다.
1.) 정규식 매핑 사용
매핑의 끝 부분에서 정규식을 사용하십시오.
@GetMapping("/example/{firstValue}/{secondValue:.+}")
public void example(
@PathVariable("firstValue") String firstValue,
@PathVariable("secondValue") String secondValue) {
//...
}
+를 사용하면 점이 경로 변수의 일부가 된 후의 값을 나타냅니다.
2.) @PathVariable 끝에 슬래시 추가
@GetMapping("/example/{firstValue}/{secondValue}/")
public void example(
@PathVariable("firstValue") String firstValue,
@PathVariable("secondValue") String secondValue) {
//...
}
이것은 Spring의 기본 동작으로부터 변수를 보호하는 두 번째 변수를 포함합니다.
3) Spring의 기본 webmvc 구성을 재정의함으로써
Spring은 @EnableWebMvc 주석을 사용하여 가져온 기본 구성을 무시하는 방법을 제공 합니다. 애플리케이션 컨텍스트에서 자체 DefaultAnnotationHandlerMapping Bean 을 선언하고 useDefaultSuffixPattern 속성을 false로 설정 하여 Spring MVC 구성을 사용자 정의 할 수 있습니다 . 예:
@Configuration
public class CustomWebConfiguration extends WebMvcConfigurationSupport {
@Bean
public RequestMappingHandlerMapping
requestMappingHandlerMapping() {
RequestMappingHandlerMapping handlerMapping
= super.requestMappingHandlerMapping();
handlerMapping.setUseSuffixPatternMatch(false);
return handlerMapping;
}
}
이 기본 구성을 재정의하면 모든 URL에 영향을 미칩니다.
참고 : 여기에서는 기본 메소드를 재정의하도록 WebMvcConfigurationSupport 클래스를 확장합니다. WebMvcConfigurer 인터페이스를 구현하여 deault 구성을 대체하는 방법이 하나 더 있습니다. 이 읽기에 대한 자세한 내용은 https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/EnableWebMvc.html을 참조하십시오.