【发布时间】:2021-07-26 23:50:53
【问题描述】:
使用 postman 一切都是 fine 原始 JSON 内容类型。
{"query":"{getX(filter: \"X\", filter2: \"Y\") {data1, data2, data3} }
在 java client 中调用时,我得到 400 错误。
String body = "{\"query\":\"{getX(filter: \\\"X\\\", filter2: \\\"Y\\\") {data1, data2, data3}}\"}";
// simply copied from postman to Intellij and it did some escaping for me
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity httpEntity = new HttpEntity<>(body, headers);
ResponseEntity<List<SomeObject>> response = restTemplate.exchange(uri, POST, httpEntity, new ParameterizedTypeReference<List<SomeObject>>(){});
在服务器端我可以看到我收到了错误:
JSON parse error: Cannot construct instance of 'java.util.LinkedHashMap': no String-argument constructor/factory method to deserialize from String value ....
//Looks like server thinks I passed one big string
... payload="{\"query\":\"{getX(filter: \\\"X\\\", filter2: \\\"Y\\\") {data1, data2, data3}}\"}" ...
但是在 服务器端,当我从 postman 调用时,我得到了这个 payload log,它工作得很好
... payload={"query":"{getX(filter: \"X\", filter2: \"Y\") {data1, data2, data3}}"} ...
显然,我可以看到,当我从 java 有效负载调用时,数据包裹在 qoutes 中,并且每个 qoute 都在其中转义,同时来自邮递员的有效负载没有包裹在 qoutes 下,除了过滤器之外没有任何东西被转义。使用 restTemplate,我到底能做什么?
【问题讨论】:
标签: java spring-boot graphql graphql-java