У меня есть приложение Spring-Boot, работающее на Tomcat. В нем есть RestController с параметром запроса.
@RequestMapping(value = "/v1/test", method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
public String getV2LocationByName(
@RequestParam
String cityName cityName,
@RequestParam(value = LANGUAGE, defaultValue = US_ENGLISH_LOCALE) String language,
HttpServletRequest request) throws InterruptedException, ExecutionException {
--------------
---------------
System.out.println(cityName);
}
Когда я отлаживаю приложение весенней загрузки, параметр cityName запроса декодируется
т.е. если URL-адрес http://localhost:8080/v1/test?cityName=Andaman%26Nicobar,, он декодируется в http://localhost:8080/v1/test?cityName=Andaman&Nicobar.
Но когда я написал весенний тест MVC:
@RunWith(SpringRunner.class)
@SpringBootTest( webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ApplicationTest {
@LocalServerPort
private int port;
TestRestTemplate restTemplate = new TestRestTemplate();
HttpHeaders headers = new HttpHeaders();
@Test
public void testRetrieveStudentCourse() {
HttpEntity<String> entity = new HttpEntity<String>(null, headers);
ResponseEntity<String> response = restTemplate.exchange(
createURLWithPort("v1/test?cityName=Andaman%26Nicobar"),
HttpMethod.GET, entity, String.class);
}
private String createURLWithPort(String uri) {
return "http://localhost:" + port + uri;
}
Когда я отлаживал этот тест и контроллер, cityName на этот раз не был декодирован. Почему он так себя ведет? Как добавить для этого юнит-тест?