Restクライアントソフトウェアで呼び出したときに、RESTサーバーが応答を生成しています。上記のresttemplate
コードで呼び出すと、サーバーは応答(ログの出力)を生成しますが、resttemplate
は何もせず(呼び出し後に次の行は実行されません)、出力します内部エラー =。
これは私のサーバーの方法です
@ResponseBody
public ResponseEntity<Map<String, Object>> name(){......
...
return new ResponseEntity<Map<String, Object>>(messagebody, HttpStatus.OK);
}
これは私がrestTemplateを通してそれを呼んでいる方法です
ResponseEntity<Map> response1 = restTemplate.getForEntity(finalUrl.toString(), Map.class);
ワイルドカードMapの代わりに ParameterizedTypeReference を使用してみてください。このようになります。
ParameterizedTypeReference<Map<String, Object>> typeRef = new ParameterizedTypeReference<Map<String, Object>>() {};
ResponseEntity<Map<String, Object>> response = restTemplate.exchange(finalUrl.toString(), HttpMethod.GET, null, typeRef);
これは私のために働く例です
@RequestMapping(value = "/getParametros/{instancia}", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
public ResponseEntity<String> getParametros(@PathVariable String instancia)
{
LOG.debug("REST. Obteniendo parametros del servidor " + instancia);
Map<String, String> mapa = parametrosService.getProperties(instancia);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json; charset=UTF-8");
headers.add("X-Fsl-Location", "/");
headers.add("X-Fsl-Response-Code", "302");
ObjectMapper mapper = new ObjectMapper();
String s = "";
try
{
s = mapper.writeValueAsString(mapa);
} catch (JsonProcessingException e)
{
LOG.error("NO SE PUEDE MAPEAR A JSON");
}
if (mapa == null)
return new ResponseEntity<String>(HttpStatus.BAD_REQUEST);
return new ResponseEntity<String>(s, headers, HttpStatus.OK);
}
stringで応答を取得できるHttpStatusCodeExceptionをキャッチできます。以下のコードは私のために働きます。
restTemplate.postForObject( url, jsonRequest, ResponseData.class );
catch( HttpStatusCodeException codeException )
{
String payload = codeException.getResponseBodyAsString();
System.out.println( payload );
}