は私のREST APIコードです:渡されたのparamがサービス側で復号されなかった以下は自動的に
@RequestMapping(value = "/get", method = RequestMethod.POST, produces = { "application/json" })
@ApiOperation(value = "get data by key.", notes = "return json string value.")
public JsonObjectResponse<String> get(
@ApiParam(required = true, name = "regionName", value = "region name") @RequestParam("regionName") String regionName,
@ApiParam(required = true, name = "key", value = "region key,Default is uuid") @RequestParam("key") String key) throws UnsupportedEncodingException
{
JsonObjectResponse<String> jr = new JsonObjectResponse<String>();
//key = decodeJsonString(key); // added for junit
String val = adfService.onPath(regionName).get(key);
jr.setState(StateCode.SUCCESS);
jr.setData(JsonObject.create().append(key,val).toJson());
return jr;
}
私はパラメータを渡すためにしようとしている:regionName = /融合/ TABLE1 &キーを= { "fusionTbl1DetailNo": "fusionNo001"、 "PK": "PK0001"}私は威張っ-UIを介して、それを呼び出した場合
が、それは次のように呼ばれる:
http://localhost:8080/service/basic/get?regionName=%2Ffusion%2Ftable1&key=%7B%22fusionTbl1DetailNo%22%3A%22fusionNo001%22%2C%22pk%22%3A%22PK0001%22%7D&token=8652493a-4147-43f4-af3a-bcb117fb7d42
それE ncodedパラメータとこれらのパラメータもサーバー側で正しく自動的にデコードできます。私は、このAPIのためのテストケースを追加したい場合は、私は以下のようにrestTemplate.exchange方法、コードを使用します。
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url); for (Entry<String, String> entry : queryParamMap.entrySet()) { builder.queryParam(entry.getKey(), entry.getValue()); } if (uriParamMap != null) { url = builder.buildAndExpand(uriParamMap).toUriString(); } else { url = builder.toUriString(); } if (StringUtils.isEmpty(requestBody)) { if (bodyParamMap != null) { requestBody = parseMapToParams(bodyParamMap); } else { requestBody = ""; } } HttpHeaders headers = new HttpHeaders(); MediaType mediaType = new MediaType("application", "json", Charset.forName("UTF-8")); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); // headers.add(HttpHeaders.CONTENT_TYPE, "application/json"); // headers.add("Accept", "application/json"); // headers.set(HttpHeaders.ACCEPT, "application/json"); headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON)); // headers.add("Accept-Encoding", "gzip, deflate, br"); headers.set("Accept-Charset", "utf-8"); headers.set("Accept-Encoding", "gzip"); headers.add("Accept-Language", "zh-CN,zh;q=0.8,en;q=0.6"); headers.add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"); headers.add(TestBase.TOKEN_HEADER, TestBase.getTokenId()); HttpEntity<String> request = new HttpEntity<>(body, headers); restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8"))); ResponseEntity<String> response = restTemplate.exchange(url, httpMethod, request, String.class); localresponse.set(response); System.out.println("response:" + response); return response;
私は、パラメータを追加するUriComponentsBuilderを使用し、それがためにURLをフォーマットしますメソッドexchange
の場合はhttp://localhost:8080/service/basic/get?regionName=/fusion/table1&key=%7B%22fusionTbl1DetailNo%22:%22fusionNo001%22,%22pk%22:%22PK0001%22%7D
です。ただし、サーバー側が呼び出しを受け取ったときに、パラメーターkey
をデコードしなかった場合、その値はまだ%7B%22fusionTbl1DetailNo%22:%22fusionNo001%22,%22pk%22:%22PK0001%22%7D
でした。それが理由です?私は:(、追加の設定を追加し、呼び出し闊歩から何の効果もヘッダの設定を比較していない
どうもありがとう、のようです。 – Shihong