[SPRING] Spring RestTemplate에서 JSON으로 표현 된 쿼리 매개 변수를 사용하는 방법은 무엇입니까?
SPRINGSpring RestTemplate에서 JSON으로 표현 된 쿼리 매개 변수를 사용하는 방법은 무엇입니까?
Spring RestTemplate을 사용하여 JSON으로 표현 된 쿼리 매개 변수가있는 HTTP 끝점에 요청해야합니다.
restTemplate.getForObject(
apiRoot + "/path" + "?object={myObject}",
Response.class,
new MyObject())
여기에 MyObject가 JSON (및 URL 인코딩 된 코드로 변환)으로 변환되어야합니다. 그러나 RestTemplate은 대신 toString 호출로이를 String으로 변환합니다. MyObject는 Jackson에 의해 JSON으로 변환 가능합니다. UriComponentsBuilder도 같은 방식으로 작동합니다.
UriComponentsBuilder.fromHttpUrl(apiRoot)
.path("/path")
.queryParam("object", new MyObject()))
.queryParam("access_token", accessToken)
.toUri()
손으로 ObjectMapper.writeValueAsString을 호출하지 않도록하는 방법이 있습니까?
업데이트 : 결과에서 명확히하기 위해 MyObject가 제공하는 URL (또는 URL 인코딩 형식의 object? % 7B % 22key % 22 % 3A42 % 7D)에? object = { "key": 42} 값이 42 인 속성 키
해결법
-
==============================
1.writeValueAsString을 사용할 때의 문제점은 무엇입니까? 설명해 주시겠습니까?
writeValueAsString을 사용할 때의 문제점은 무엇입니까? 설명해 주시겠습니까?
내 마음에 오는 유일한 해결책은 (나는 Jackson이이 객체가 그 순간에 연재되어야한다는 것을 알 수있는 방법이 있다면 나는 생각하지 않는다) :
@Autowired ObjectMapper objectMapper; @Override public void run(String... strings) throws Exception { String urlBase = "http://localhost:8080/path"; RestTemplate restTemplate = new RestTemplate(); String url; MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>(); params.set("object", objectMapper.writeValueAsString(new MyObject())); UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(urlBase).queryParams(params); url = builder.build().toUri().toString(); LOGGER.info("Composed before decode: " + url); //restTemplate.getForObject(url, Void.class); url = URLDecoder.decode(url, "UTF-8"); LOGGER.info("Composed after decode: " + url); }
산출:
2016-04-05 16:06:46.811 INFO 6728 --- [main] com.patrykwoj.StackOverfloApplication : Composed before decode: http://localhost:8080/path?object=%7B%22key%22:43%7D 2016-04-05 16:06:46.941 INFO 6728 --- [main] com.patrykwoj.StackOverfloApplication : Composed after decode: http://localhost:8080/path?object={"key":43}
편집하다:
요청 매개 변수로 JSON 객체를 보내는 것은 일반적으로 좋은 생각이 아닙니다. 예를 들어 JSON 내부의 중괄호에 문제가있을 수 있습니다.
from https://stackoverflow.com/questions/36423202/how-to-use-query-parameter-represented-as-json-with-spring-resttemplate by cc-by-sa and MIT license