2017-03-02 9 views
0

이 같은 요청 처리기와 http://localhost:8080/things/ZhaD2lk27XQPRJtwrABltd+UTWXcbnY%2FTrpxGP7VDVo= 내 봄 부팅 응용 프로그램 RestController을 GET 호출 할 때 :springboot rest controller를 사용하여 url 경로의 space()에 대해 플러스 (+)를 디코딩하는 이유는 무엇입니까?

@RequestMapping("/things/{thingId}") 
    public ResponseEntity<Thing> getThing(
     @PathVariable String thingId) { 

    System.out.println("thingId=" + thingId); 
    ... 

결과에 다음 대신 내가 ZhaD2lk27XQPRJtwrABltd+UTWXcbnY/TrpxGP7VDVo=을 기대했을 것이다 무엇 ZhaD2lk27XQPRJtwrABltd UTWXcbnY/TrpxGP7VDVo= 인쇄된다.

보시 다시 피가 공간으로 변하고 있습니다. 이것은 경로 부분과 쿼리 부분에서만 발생하지 않아야합니다. 이것이 내가 URL을 작성하는 데 사용하는 UriComponentsBuilder.build().encode() 스프링이 더하기를 %2B으로 바꾸지 않는 이유입니다.

인코딩 된 슬래시 (/)가 작동하려면 이미 응용 프로그램을 조정해야했습니다. 자세한 내용은 REST Endpoint unreachable if ID in URL contains %2F을 참조하십시오.

Tomcat embed 8.5.11을 사용하는 SpringBoot 1.4.4.RELEASE를 사용하고 있습니다.
저는 Spring RestTemplate, Postman 및 Chrome에서 서비스를 호출 해 보았습니다. 모든 경우에서 같은 결과가 나타납니다. 플러스는 공백으로 바뀝니다.

+0

브라우저에 URL을 입력하고 있습니까? 또는 js를 사용하여 서비스를 호출합니까? 또는 자바 클라이언트에서 서비스를 호출하고 있습니까? – reos

답변

1

IDE에서 자동으로 POM 파일에 spring-boot-starter-undertow를 추가했음을 확인한 후 해결할 수있었습니다. 나는 spring-boot-starter-tomcat을 spring-boot-starter-web에서 제외하지 않았으므로 커버 밑에서 어떤 일이 일어나고 있는지 확신 할 수 없지만 spring-boot-starter-undertow 의존성을 제거하면 문제가 해결됩니다.