[SPRING] Spring Request Param에서 + (플러스)의 역 직렬화
SPRINGSpring Request Param에서 + (플러스)의 역 직렬화
다음과 같은 간단한 HTTP GET 요청이 있습니다.
http : // localhost : 8080 / search? page = 0 & size = 20 & sort = id, asc & description = 1 + 3
그리고 RestController :
@RequestMapping(value = "/search", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<TestEntity>> search(Pageable pageable, @RequestParam("description") String description) {
Page<TestEntity> page = service.search(pageable, description);
HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page);
return ResponseEntity
.ok()
.headers(headers)
.body(page.getContent());
}
그러나 @RequestParam "description"의 값은 "1 3"을 얻고 있습니다.
내가 뭘 잘못하고 있죠?
아니면 Spring @RequestParam에서 "+"와 같은 신호가 "+"로 역 직렬화되도록하려면 어떻게해야합니까?
이것은 내 pom.xml입니다
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
<project.http.version>1.23.0</project.http.version>
<project.oauth.version>1.23.0</project.oauth.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
해결법
-
==============================
1.모든 것이 예상대로입니다. URL 인코딩의 RFC3986에 따라 +는 공간으로 디코딩 된 예약 문자입니다. +를 값으로 사용하려면 예약 인코딩 백분율 문자에 설명 된대로 +2를 % 2B로 인코딩해야합니다. 이렇게하면 URL이 만들어집니다.
모든 것이 예상대로입니다. URL 인코딩의 RFC3986에 따라 +는 공간으로 디코딩 된 예약 문자입니다. +를 값으로 사용하려면 예약 인코딩 백분율 문자에 설명 된대로 +2를 % 2B로 인코딩해야합니다. 이렇게하면 URL이 만들어집니다.
http : // localhost : 8080 / search? page = 0 & size = 20 & sort = id, asc & description = 1 % 2B3
예를 들어 + 처리와 관련하여 Spring이 때로는 일관성이 없다는 점에 유의하십시오. SPR-16860 Spring은 URL 버그의 인코딩 / 디코딩에 일관성이 없습니다.
-
==============================
2.역 직렬화와 관련이없는 URL 인코딩이 누락되었습니다.
역 직렬화와 관련이없는 URL 인코딩이 누락되었습니다.
HTTP 요청을 보낼 때 매개 변수 값을 인코딩해야합니다.이 경우 +는 % 2B로 바꿔야합니다.
http://localhost:8080/search?page=0&size=20&sort=id,asc&description=1%2B3
각도 사용의 경우 HttpUrlEncodingCodec encodeValue (value : string)
from https://stackoverflow.com/questions/53361712/desserialization-of-plus-in-spring-request-param by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 최대 절전 모드를 사용하여 봄 부팅에서 MySQL 저장 프로 시저를 호출하는 방법은 무엇입니까? (0) | 2019.08.17 |
---|---|
[SPRING] WebMvcConfigurationSupport와 WebMvcConfigurerAdapter의 차이점 (0) | 2019.08.16 |
[SPRING] Spring 주석 @Autowired는 어떻게 작동합니까? (0) | 2019.08.15 |
[SPRING] 스프링 빈 초기화 시간을 계산할 수 있습니까? (0) | 2019.08.14 |
[SPRING] 스프링 데이터 JPA 기본 쿼리 건너 뛰기 잠김 (0) | 2019.08.14 |